![[ "$VAR" = "" ] と [ -z "$VAR" ] は常に同じですか?](https://linux33.com/image/68349/%5B%20%22%24VAR%22%20%3D%20%22%22%20%5D%20%E3%81%A8%20%5B%20-z%20%22%24VAR%22%20%5D%20%E3%81%AF%E5%B8%B8%E3%81%AB%E5%90%8C%E3%81%98%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F.png)
私のコードは次のとおりです
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
少し速いかもしれません(しかしシェルスクリプトではマイクロ秒を気にする必要はありません)、=
もっと読みやすくなります。