なぜ[[$var]]の代わりに[[-n $var]]を使うのですか?

なぜ[[$var]]の代わりに[[-n $var]]を使うのですか?

存在するこの回答次のコードがあります。

if [[ $ZSH_VERSION ]]; then

これ編集済みになる:

if [[ -n $ZSH_VERSION ]]; then

修正する:今編集者のコメントを見ました。

[[ x ]]は最近までzshでは動作しませんでした。

私は探しましたzshリリースノートそしてこれへの参照が見つかりません。

どのzshバージョンが最初に許可されましたか[[ x ]]

ベストアンサー1

zsh5.5.1文書からCONDITIONAL EXPRESSIONS

互換性のために構文上重要でない引数(通常は変数)がある場合、条件は式が長さがゼロ以外の文字列に拡張されているかどうかをテストすることで処理されます。つまり、[[$ var]]は[[-n $ var]]と同じです。可能であれば、2番目の明示的な形式を使用することをお勧めします。

ソースツリーを利用すると、

% grep -rl 'if there is a single argument' .
./Doc/Zsh/cond.yo
% git blame ./Doc/Zsh/cond.yo | grep 'if there is a single argument'
d082827c83 (Jun T             2014-05-18 22:03:35 +0900 198) For compat...

検査の結果、git logコードの変更が文書より前に行われたことがわかりました。

commit 9d47e8398d299e53ffe4e7ddf3731d2fedae9948
...
Date:   Tue May 13 08:16:50 2014 -0700

    32609: [[ $var ]] behaves as [[ -n $var ]] for bash/ksh compatibility

このファイルのマッピングはわかりませんChangeLogが、5.0.6(Thu Aug 28 19:07:04 2014 +0100)がこれらの変更を適用した最初のバージョンのようです。git tagzsh

おすすめ記事