2017-03-07 5 views
3

変数がzshに設定されているかどうかを検証する標準的/慣用的な方法は何ですか?変数がzshに設定されているかどうかを確認するにはどうすればよいですか?

if ....something.... ; then 
    print "Sweet, that variable is defined" 
else 
    print "That variable is not defined" 
fi 

ここはthe SO answer for bashです。

+0

の可能性のある重複した[変数がバッシュに設定されているかどうかを確認する方法?](http://stackoverflow.com/questions/3601515/how-to-check-if-a-variable-is-set -in-bash) – Jens

+0

Huh。つまり、* zshのみの構文がありますが、ここでもPOSIX sh構文が機能します。 –

+0

明確にするために編集されました。 Bashの質問は標準的なzsh構文を提供しません。 – paulmelnikow

答えて

5

Zshの中でこれを行うための一般的な方法は、次のとおりです。

if ((${+commands[brew]})); then 
    brew install mypackage 
else 
    print "Please install Homebrew first." 
fi 

Zshの5.3以降では、あなたが条件式で-v演算子を使用することができます:たとえば

if ((${+SOME_VARIABLE})); then 

if [[ -v SOME_VARIABLE ]]; then 

POSIX準拠のテストは、

+1

Uh、いいえ、[[]] 'は移植性がありません(POSIXではありません)。 – Jens

+0

正しい方法はありますか?それを修正しましょう。 – paulmelnikow

+0

移植可能なテストは '[-z" $ {SOME_VARIABLE + 1} "]'となります。変数が何か(空の文字列であっても)に設定されている場合、展開は '1'を返し、設定されていなければ空の文字列に展開します。 – chepner

4

-vzsh 5.3で導入された)演算子を条件式に使用します。

% unset foo 
% [[ -v foo ]] && echo "foo is set" 
% foo= 
% [[ -v foo ]] && echo "foo is set" 
foo is set 
+0

zsh 5.2で私のために働かない:zsh:不明な状態:-v – paulmelnikow

関連する問題