変数が設定されていないかテストします。

変数が設定されていないかテストします。

変数(その名前はスクリプトで静的に知られています)が設定されていない(空でない)ことを確認するポータブルテストはありますか?

答え1

スカラー変数の場合、標準(POSIX)sh構文が使用されます。

if [ "${var+set}" != set ]; then
  echo var is not set
fi

または、よりきれいですが、あまり明確ではありません。

if [ -z "${var++}" ]; then
  echo var is unset
fi

または:

if ${var+false}; then
  echo var is unset
fi

配列変数の場合(配列持ち運べる)、bash、kshでは、配列にリスト(空のリストを含む)が割り当てられていない場合、inzshまたはyashunsetが返されます。未設定インデックス0の要素が設定されていない場合。連想配列と同じです(キー「0」の場合)。

zsh(シミュレーションでない場合shexport varまたはreadonly var 主張する変数ですが値を提供しないので、それ以外のシェルはこれをこの変数としてzsh報告します( / を呼び出す前に値が割り当てられていない場合)。varunsetvarexportreadonly

答え2

POSIXは、パラメータが設定されていないことをテストするためのさまざまなパラメータ拡張を定義します。

次のパラメータ拡張を使用して、パラメータが設定されていないかどうかをテストできます。 2番目の部分(疑問符の後ろ)を指定して、パラメータが設定さvarれていないことを示します。

echo ${var?parameter not set}
-sh: var: parameter not set

未定義パラメータを使用すると、プログラミングエラーが発生する可能性があります。

prompt% sh -u script   # or set -o nounset
  • set特別な組み込み機能を見てくださいPOSIX仕様

関連情報