シェル: なぜ [ -n "$VAR" ] の代わりに [ -n "${VAR-}" ] ですか?

シェル: なぜ [ -n

シェルスクリプトがたくさん見えます(例:これ)変数が存在することを確認してください。たとえば、次のようになります。

[ -n "${VAR-}" ]

私が知っている限り、変数の有無(または)を確認するときにaを提供しない型を使用する${VAR-fallback}ことは意味がありません。同じだ。たとえば、設定されていない変数の場合fallback-n-z${VAR:-fallback}

unset VAR
[ -z "$VAR" ]       &&
  [ -z "${VAR-}" ]  &&
  [ -z "${VAR:-}" ] &&
  echo True        # => True

そして空の変数として

VAR=
[ -z "$VAR" ]       &&
  [ -z "${VAR-}" ]  &&
  [ -z "${VAR:-}" ] &&
  echo True        # => True

しかし、尋ねたいほど多くの場所でそれを見ることができます。私が何かを見逃しているのでしょうか?これは誤用につながる誤解ですか、それとも実際の理由はありますか?

ベストアンサー1

set -u有効ですがVAR設定されていない場合は[ -z "$VAR" ]エラーが発生します。[ -z "${VAR-}" ]デフォルト値を使用すると、設定されていない変数の使用に関する確認は無視され、エラーは発生しません。

おすすめ記事