存在するという意味に依存します。
宣言されているが割り当てられていない変数は存在しますか?
空のリストが割り当てられた配列(またはハッシュ)変数は存在しますか?
現在割り当てられていない変数を指すnameref変数は存在しますか?
あなたは検討してください$-
、$#
、$1
変数?(POSIXはサポートしていません)。
Bourneのようなシェルでは、標準的な方法は次のとおりです。
if [ -n "${var+set}" ]; then
echo '$var was set'
fi
これは、スカラー変数およびその他のパラメーターに対して機能し、変数に値が割り当てられているかどうかを判断します(空、そうでない、自動的に、環境、割り当て、read
などからfor
)。
typeset
or declare
コマンドを持つシェルの場合、宣言されているが以外で割り当てられていない変数をsetとして報告しません。zsh
除いて、配列をサポートシェルのyash
とzsh
それのように報告しないだろうし indice 0の要素が設定されていない限り、配列変数。
連想配列タイプの変数の場合bash
(ただし、そうではありませksh93
んzsh
)、キー "0"の要素が設定されていない限り、変数は設定済みとして報告されません。
以下のためにksh93
とbash
、型の変数のためのnameref namerefによって参照される変数を考慮そのものである場合にのみtrueを返すことを、セット。
以下のためにksh
、zsh
そしてbash
、潜在的により良いアプローチは次のようになります。
if ((${#var[@]})); then
echo '$var (or the variable it references for namerefs) or any of its elements for array/hashes has been set'
fi
以下のためにksh93
、zsh
そしてbash
4.4以上、またあります。
if typeset -p var 2> /dev/null | grep -q '^'; then
echo '$var exists'
fi
設定または宣言された変数を報告します。
$somevar
変数が存在しない場合に値/文字列に設定する場合:${somevar:=42}
。