文に変数があることを確認する必要がありますif
。いくつかの効果:
if [ -v $somevar ]
then
echo "Variable somevar exists!"
else
echo "Variable somevar does not exist!"
最も近い質問はこれ、実際に私の質問に答えません。
答え1
最新のbash(4.2以上):
[[ -v name_of_var ]]
からhelp test
:
-v VAR、シェル変数VARが設定されている場合はtrue
答え2
何を意味するかによって異なります存在する。
変数が宣言されたが値が割り当てられていないかどうか存在する?
空のリストが割り当てられた配列(またはハッシュ)変数かどうか。存在する?
nameref変数が現在割り当てられていない変数を指しているかどうか存在する?
$-
、、$#
変数を検討していますか$1
? (POSIXはそうではありません)。
Bourneのようなシェルでは、標準的な方法は次のとおりです。
if [ -n "${var+set}" ]; then
echo '$var was set'
fi
これは、スカラー変数やその他のパラメータに対して変数に値が割り当てられているかどうか(環境、割り当てなどでread
自動的にnullまたはnull以外の値for
)を決定するために使用されます。
typeset
または、コマンドを含むシェルの場合、declare
次のように報告されません。置くすでに存在する変数発表するしかし、分散(では、zsh
変数を宣言すると値が割り当てられ、指定されていない場合はデフォルト値が割り当てられます。)
配列をサポートするシェルの場合(および次のようには報告されませyash
ん)zsh
置くインデックス0の要素が設定されていない場合の配列変数です。
for bash
(ksh93
norではないzsh
)、型変数用連想配列、これは次のように報告されません。置くキー「0」が設定されていない要素です。
ksh93
およびbash
型変数の場合名前参照、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
および4.4以降zsh
には以下もbash
あります。
if typeset -p var 2> /dev/null | grep -q '^'; then
echo '$var exists'
fi
設定または宣言された変数を報告します。
答え3
答えで述べたようにだから、確認する方法は次のとおりです。
if [ -z ${somevar+x} ]; then echo "somevar is unset"; else echo "somevar is set to '$somevar'"; fi
ここで、$ {somevar + x}はパラメータ拡張で、varが設定されていない場合はnullと評価され、そうでない場合は文字列 "x"が置き換えられます。
-n
他の答えが提案したように、 using は変数に空の文字列が含まれているかどうかを確認します。存在するかどうかを確認しません。
答え4
if set|grep '^somevar=' >/dev/null;then
echo "somevar exists"
else
echo "does not exist"
fi