[ "$VAR" = "" ] と [ -z "$VAR" ] は常に同じですか?

[ "$VAR" = "" ] と [ -z "$VAR" ] は常に同じですか?

私のコードは次のとおりです

VAR=""

while [ -z "$VAR" ]; do
  VAR=$( command | grep "important_string" )
done

commandだから私はそれが表示されるまでの出力をポーリングimportant_stringしてそれに入れたいと思います$VAR

[ -z "$VAR" ]との間に機能的な違いがありますか[ "$VAR" = "" ]

答え1

はい、([ -z "$VAR" ]および[ "$VAR" = "" ]...)は同じです。どちらもNULLを許可するかどうかをテストしています$VAR(バインド解除または空の文字列に設定されている場合など)。

解説者としてセラダ[ "$VAR" = "" ]VAR, if が有効なテスト (例えば if is ) を使用するとき、特に (or ) が次の場合、VAR悪いことが発生することがあります。-z[testいいえ内蔵シェル。しかし、組み込みの機能があり、これは問題にならないようですbash。テストに使用できます。バラよりzsh[[ "x$VAR" = "x" ]テスト(1)

もちろん、POSIXシェルなどがあるとします。

おそらく-z少し速いかもしれません(しかしシェルスクリプトではマイクロ秒を気にする必要はありません)、=もっと読みやすくなります。

関連情報