いくつかの内容を見てみましょう。
set -o nounset
var="${var}something"
echo $var
エラーにより失敗します。
unset.sh: line 3: var: unbound variable
+=
しかし、演算子を使うと
set -o nounset
var+=something
echo $var
エラーなしで実行され、次のように印刷されます。
something
私にとっては、このような行動が少し予想できなかったようだ。私はできますか?var+=something
との行動はvar=${var}something
似ていなければならないのでしょうか、それとも違うのでしょうか?
ベストアンサー1
ここで、シェルはbash
POSIX オプションの範囲をnounset
次に制限します。ただ変数の明示的な拡張。
つまり、nounset
シェルオプションは、設定されていない変数を明示的に拡張したい場合にのみ機能します。これが起こっていますが、var="${var}something"
今はそうではありませんvar+=something
。
この文にはvar+=something
言及がないため、$var
設定されていない変数への明示的な拡張はありません。
私の考えでは、次のbash
2つの理由で大丈夫です。
nounset
明示的な変数の拡張に言及したいと思います。- この
+=
演算子は POSIX 標準の拡張であるため、POSIX シェルオプションに影響を与える必要はありません。
var
値を追加する前に定義されていることを確認する必要がある場合は、次のものを使用してください。
if [[ -v var ]]; then
var+=something
else
echo 'Unset variable var' >&2
exit 1
fi
(つまり、組み込みテストでテスト-v
)またはnounset
設定されていない変数の実際の使用法をキャプチャすることに依存する場合は、var=${var}something
構文を使用してください。