存在するという意味に依存します。
宣言されているが割り当てられていない変数は存在しますか?
空のリストが割り当てられた配列(またはハッシュ)変数は存在しますか?
現在割り当てられていない変数を指すnameref変数は存在しますか?
あなたは検討してください$-、$#、$1変数?(POSIXはサポートしていません)。
Bourneのようなシェルでは、標準的な方法は次のとおりです。
if [ -n "${var+set}" ]; then
echo '$var was set'
fi
これは、スカラー変数およびその他のパラメーターに対して機能し、変数に値が割り当てられているかどうかを判断します(空、そうでない、自動的に、環境、割り当て、readなどからfor)。
typesetor 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そしてbash4.4以上、またあります。
if typeset -p var 2> /dev/null | grep -q '^'; then
echo '$var exists'
fi
設定または宣言された変数を報告します。
$somevar変数が存在しない場合に値/文字列に設定する場合:${somevar:=42}。