通常、${FOO-}
${FOO}
とまったく同じように動作します .
ただし、set -u
では 、設定されていない変数の展開はデフォルトでエラーになります。
だから ${FOO}
エラーかもしれませんが、${FOO-}
${...}
内の変数 « パラメータ展開 » と呼ばれます。
オンライン マニュアルまたは実際のマニュアルでその用語を検索してください (792 行目)。
${var-}
フォームは ${var:-}
とフォームが似ています . :-
の 1 行前に違いが説明されています。 拡張 (810 行目):
... 未設定または null のパラメーターの bash テスト。コロンを省略すると、設定されていないパラメーターに対してのみテストが行われます。
したがって、このフォームは、変数が設定されていない場合 (かつ) にのみテストされます。 null 以外)、展開全体 ${...}
を置き換えます -
の後の値 、この場合は null です .
したがって、${var-}
になります:
''
、したがって:またヌル。''
) var が設定されていない場合。すべては本当に:
<オール>''
に拡張 var が未設定または null の場合
したがって、展開は var の値について何も変更せず、展開も、シェルにオプション nounset
がある場合に発生する可能性のあるエラーを回避するだけです
このコードは $var
の両方の使用で停止します :
#!/bin/bash
set -u
unset var
echo "variable $var"
[[ $var ]] && echo "var set"
ただし、このコードはエラーなしで実行されます:
#!/bin/bash
set -u
unset var
echo "variable ${var-}"
[[ ${var-} ]] && echo "var set"
代替手段を実行するタイミングと理由 --install java jar javac javaws on Linux に jdk をインストールする
Amazon Linux AMI での Docker のアップグレード