BASH でこれが使用されているのをこれまで見たことがありません:
pidfile=${PIDFILE-/var/run/service.pid}
今まで見たことも使ったこともない部分がその${PIDFILE-
部分です。
答え1
$PIDFILE
が定義されている場合$PIDFILE
、またはが未定義の/var/run/service.pid
場合に使用することを意味します。$PIDFILE
新しいシェルから開始します。
$ echo ${PIDFILE-/var/run/service.pid}
/var/run/service.pid
次にPIDFILEを定義します。
$ PIDFILE=/var/run/myprogram.pid
$ echo ${PIDFILE-/var/run/service.pid}
/var/run/myprogram.pid
それはBourne Shellの昔のものですsh マニュアルページ。
${parameter-word}
If parameter is set then substitute its value;
otherwise substitute word.
すでに見たことがあるかもしれないもう 1 つの形式は です${parameter:-word}
。 は と似ていますが、 がparameter
空の文字列に設定されている場合の動作が異なります。
${parameter:-word}
Use Default Values. If parameter is unset or null,
the expansion of word is substituted. Otherwise,
the value of parameter is substituted.
実証するには:
$ 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
${NULLVAR-default}
が空の文字列に展開されることに注意してください。NULLVAR
は定義されました。
詳しい説明については、「man bash」を実行して検索してください。パラメータ拡張「/Parameter Expansion」と入力します。
この説明では ${parameter-word} ビットは隠されています。
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.
set と null に関する訂正をしてくれた Dennis に感謝します。
答え2
ミケル:
あなたが説明しているようにすべきではないでしょうか
pidfile=${PIDFILE:-/var/run/service.pid}
?