このように使用されるbash変数の意味は何ですか?
${Server?}
(bash
マンページから)とほぼ同じように機能します。
${parameter:?word}
Display Error if Null or Unset. If parameter is null or unset, the expansion of Word (or a message to that effect if Word is not present) is written to the standard error and the Shell, if it is not interactive, exits. Otherwise, the value of parameter is substituted.
その特定のバリアントは、変数が存在することを確認します(定義されており、nullではありません)。もしそうなら、それを使用します。そうでない場合は、Word
(またはWord
がない場合は適切なメッセージ)で指定されたエラーメッセージを出力し、スクリプトを終了します。
それと非コロンバージョンの実際の違いは、引用されたセクションの上のbash
マンページにあります。
部分文字列展開を実行しない場合、以下に説明するフォームを使用して、
bash
は未設定またはnullのパラメーターをテストします。 コロンを省略すると、設定されていないパラメーターに対してのみテストが行われます。
言い換えると、上記のセクションは次のように変更できます(基本的に「null」ビットを削除します)。
${parameter?word}
Display Error if Unset. If parameter is unset, the expansion of Word (or a message to that effect if Word is not present) is written to the standard error and the Shell, if it is not interactive, exits. Otherwise, the value of parameter is substituted.
このように違いが示されています。
pax> unset xyzzy ; export plugh=
pax> echo ${xyzzy:?no}
bash: xyzzy: no
pax> echo ${plugh:?no}
bash: plugh: no
pax> echo ${xyzzy?no}
bash: xyzzy: no
pax> echo ${plugh?no}
pax> _
ここで、未設定とnull変数の両方が:?
でエラーになるのに対し、未設定の1つだけが?
でエラーになることがわかります。
これは、変数が定義されていない場合、スクリプトを中止する必要があることを意味します
例:
#!/bin/bash
echo We will see this
${Server?Oh no! server is undefined!}
echo Should not get here
このスクリプトは、最初のエコーと「Oh no!...」エラーメッセージを出力します。
ここでbashのすべての変数置換を参照してください: https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html