Ich habe dies noch nie zuvor in BASH gesehen:
pidfile=${PIDFILE-/var/run/service.pid}
Das Teil habe ich noch nie zuvor gesehen/verwendet ${PIDFILE-
.
Antwort1
Dies bedeutet, dass es zu verwenden ist , $PIDFILE
wenn $PIDFILE
es definiert ist, oder /var/run/service.pid
wenn $PIDFILE
es nicht definiert ist.
Beginnen mit einer neuen Shell:
$ echo ${PIDFILE-/var/run/service.pid}
/var/run/service.pid
Definieren Sie nun PIDFILE:
$ PIDFILE=/var/run/myprogram.pid
$ echo ${PIDFILE-/var/run/service.pid}
/var/run/myprogram.pid
Es ist aus den alten Tagen der Bourne Shellsh-Manpage.
${parameter-word}
If parameter is set then substitute its value;
otherwise substitute word.
Die andere Form, die Sie vielleicht schon gesehen haben, ist ${parameter:-word}
. Sie ist ähnlich, verhält sich aber anders, wenn parameter
auf die leere Zeichenfolge gesetzt ist.
${parameter:-word}
Use Default Values. If parameter is unset or null,
the expansion of word is substituted. Otherwise,
the value of parameter is substituted.
Demonstrieren:
$ 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
Beachten Sie, wie ${NULLVAR-default}
sich zu einer leeren Zeichenfolge erweitert, dennNULLVAR
Istdefiniert.
Für eine vollständige Erklärung führen Sie "man bash" aus und suchen Sie nachParametererweiterungindem Sie „/Parameter Expansion“ eingeben.
Das ${parameter-word}-Bit ist in dieser Erklärung versteckt:
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.
Danke an Dennis für die Korrektur bezüglich Set versus Null.
Antwort2
Mikel:
sollte es nicht so sein,
pidfile=${PIDFILE:-/var/run/service.pid}
wie Sie es erklären?