Spiega questo codice BASH (una row)

Mai visto questo usato prima in BASH:

pidfile=${PIDFILE-/var/run/service.pid}

La parte che non ho mai visto / usato prima è la parte ${PIDFILE- .

  • saltando una variabile usando mentre leggi in bash
  • Come trovare l'indirizzo IP del gateway in Linux
  • nologin in / etc / shell è pericoloso .. PERCHE?
  • Copia della directory di row di command ricorsiva / profonda in Linux?
  • Linux / mysql: è sicuro copiare i file db mysql con command cp da un db all'altro?
  • Cosa devo sapere quando crei un command non shell per il login di un utente?
  • La connessione SSH si chiude quando la shell non riesce a caricare
  • come annullare il trasferimento di file in Linux?
  • 2 Solutions collect form web for “Spiega questo codice BASH (una row)”

    Significa usare $PIDFILE se $PIDFILE è definito, oppure /var/run/service.pid se $PIDFILE è undefined.

    A partire da una nuova shell:

     $ echo ${PIDFILE-/var/run/service.pid} /var/run/service.pid 

    Ora definisci PIDFILE:

     $ PIDFILE=/var/run/myprogram.pid $ echo ${PIDFILE-/var/run/service.pid} /var/run/myprogram.pid 

    È dai vecchi tempi della pagina Bourne Shell sh man .

      ${parameter-word} If parameter is set then substitute its value; otherwise substitute word. 

    L'altra forma che si è già vista è ${parameter:-word} . È simile, ma si comport diversamente se il parameter è impostato sulla string vuota.

      ${parameter:-word} Use Default Values. If parameter is unset or null, the expansion of word is substituted. Otherwise, the value of parameter is substituted. 

    Dimostrare:

     $ set | grep NOSUCHVAR # produces no output because NOSUCHVAR is not defined $ echo ${NOSUCHVAR-default} default $ echo ${NOSUCHVAR:-default} default $ NULLVAR= $ set | grep NULLVAR # produces output because NULLVAR is defined NULLVAR= $ echo ${NULLVAR-default} $ echo ${NULLVAR:-default} default 

    Notare come ${NULLVAR-default} espande alla string vuota, perché NULLVAR è definito.

    Per una spiegazione completa, eseguire "bash uomo" e cercare l' espansione del parametro digitando "/ Parameter Expansion".

    Il bit $ {parameter-word} è nascosto in questa spiegazione:

      When not performing substring expansion, using the forms documented below, bash tests for a parameter that is unset or null. Omitting the colon results in a test only for a parameter that is unset. 

    Grazie a Dennis per la correzione di set contro null.

    Mikel:

    non dovrebbe essere pidfile=${PIDFILE:-/var/run/service.pid} come spieghi?

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.