.png)
Nunca antes había visto esto usado en BASH:
pidfile=${PIDFILE-/var/run/service.pid}
La parte que nunca he visto/usado antes es la ${PIDFILE-
parte.
Respuesta1
Significa usar $PIDFILE
si $PIDFILE
está definido o /var/run/service.pid
si $PIDFILE
no está definido.
Comenzando con un nuevo shell:
$ echo ${PIDFILE-/var/run/service.pid}
/var/run/service.pid
Ahora defina PIDFILE:
$ PIDFILE=/var/run/myprogram.pid
$ echo ${PIDFILE-/var/run/service.pid}
/var/run/myprogram.pid
Es de los viejos tiempos de Bourne Shell.página de manual sh.
${parameter-word}
If parameter is set then substitute its value;
otherwise substitute word.
La otra forma que quizás ya hayas visto es ${parameter:-word}
. Es similar, pero se comporta de manera diferente si parameter
se establece en la cadena vacía.
${parameter:-word}
Use Default Values. If parameter is unset or null,
the expansion of word is substituted. Otherwise,
the value of parameter is substituted.
Demostrar:
$ 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
Observe cómo ${NULLVAR-default}
se expande a la cadena vacía, porqueNULLVAR
esdefinido.
Para obtener una explicación completa, ejecute "man bash" y busqueExpansión de parámetrosescribiendo "/Expansión de parámetros".
El bit ${parameter-word} está oculto en esta explicación:
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.
Gracias a Dennis por la corrección sobre conjunto versus nulo.
Respuesta2
Mikel:
¿No debería ser así
pidfile=${PIDFILE:-/var/run/service.pid}
como lo estás explicando?