回答:
はい([ -z "$VAR" ]
と[ "$VAR" = "" ]
...)は同等です。両方が$VAR
空かどうかをテストしています(バインドされていない、または空の文字列に設定されている場合など)。
でコメントしたようCelada、悪い事は、使用する際に起こる可能性がある[ "$VAR" = "" ]
場合にはVAR
、いくつかの有効なテストがある(場合などVAR
である-z
)、特にとき[
(またはtest
)でないシェル組み込み。しかし、bash
またはzsh
それ[
は組み込みであり、それは問題ではないようです。[ "x$VAR" = "x" ]
テストに使用できます。test(1)を参照してください
もちろん、POSIXシェルなどを想定しています。
おそらく-z
少し速いかもしれませんが(シェルスクリプトではマイクロ秒は気にしないでください)、=
おそらくもっと読みやすいかもしれません。
[ "$VAR" = "" ]
の内容が$VAR
ハイフンで始まる場合、構文エラーが発生するため、確かにそれは間違いでした。たとえば、$VAR
containsの場合は-z
、次のように展開さ[ -z = "" ]
れます。つまり=
、空かどうかをテストします(そうではありません)。そして""
、無関係な議論として扱いますか?しかし、私はあなたの答えを読んだ後でそれを試してみたので、そのように失敗するようには思えません!私は何十年もの間、おそらく不必要に[ "x$VAR" = "xfoo" ]
特殊文字から身を守るためのような構造を使用してきました$VAR
!
test
。
[[
bashのようなキーワードと混同しませんでしたか?彼らは本当に違います。--- test
bashのビルトインでの変数の展開に関する特別な動作は確認していません。
zsh
[ "$VAR" = "" ]
ことができるものがたくさんあるので、-z
代わりに使う方が安全です。
==
は構文が正しくありませんが、多くのシェルで機能します(おそらく他の言語を使用している人にとっては非常に重要なメモリだからです)。を使用する必要があります=
。