Bashで文字列を連結するときの名詞設定オプション

Bashで文字列を連結するときの名詞設定オプション

いくつかの内容を見てみましょう。

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

ここで、シェルはbashPOSIX オプションの範囲をnounset次に制限します。ただ変数の明示的な拡張。

つまり、nounsetシェルオプションは、設定されていない変数を明示的に拡張したい場合にのみ機能します。これが起こっていますが、var="${var}something"今はそうではありませんvar+=something

この文にはvar+=something言及がないため、$var設定されていない変数への明示的な拡張はありません。

私の考えでは、次のbash2つの理由で大丈夫です。

  1. nounset明示的な変数の拡張に言及したいと思います。
  2. この+=演算子は POSIX 標準の拡張であるため、POSIX シェルオプションに影響を与える必要はありません。

var値を追加する前に定義されていることを確認する必要がある場合は、次のものを使用してください。

if [[ -v var ]]; then
    var+=something
else
    echo 'Unset variable var' >&2
    exit 1
fi

(つまり、組み込みテストでテスト-v)またはnounset設定されていない変数の実際の使用法をキャプチャすることに依存する場合は、var=${var}something構文を使用してください。

おすすめ記事