変数(その名前はスクリプトで静的に知られています)が設定されていない(空でない)ことを確認するポータブルテストはありますか?
答え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
またはyash
unsetが返されます。未設定インデックス0の要素が設定されていない場合。連想配列と同じです(キー「0」の場合)。
zsh
(シミュレーションでない場合sh
)export var
またはreadonly var
主張する変数ですが値を提供しないので、それ以外のシェルはこれをこの変数としてzsh
報告します( / を呼び出す前に値が割り当てられていない場合)。var
unset
var
export
readonly
答え2
POSIXは、パラメータが設定されていないことをテストするためのさまざまなパラメータ拡張を定義します。
- それを見てください(これPOSIX仕様!
次のパラメータ拡張を使用して、パラメータが設定されていないかどうかをテストできます。 2番目の部分(疑問符の後ろ)を指定して、パラメータが設定さvar
れていないことを示します。
echo ${var?parameter not set}
-sh: var: parameter not set
未定義パラメータを使用すると、プログラミングエラーが発生する可能性があります。
prompt% sh -u script # or set -o nounset
set
特別な組み込み機能を見てくださいPOSIX仕様。