存在するこの回答次のコードがあります。
if [[ $ZSH_VERSION ]]; then
これ編集済みになる:
if [[ -n $ZSH_VERSION ]]; then
修正する:今編集者のコメントを見ました。
[[ x ]]は最近までzshでは動作しませんでした。
私は探しましたzsh
リリースノートそしてこれへの参照が見つかりません。
どのzsh
バージョンが最初に許可されましたか[[ x ]]
?
答え1
zsh
5.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 tag
zsh
答え2
コードが何をするかをより明確に示します。
[[ -n $ZSH_VERSION ]]
個人的には、この場合は、var値のnullを許可するかどうかをテストしていることを示すため、少し好みです。
しかし、私はしばしばスクリプトでブール値を表す変数を使用し、それに応じて名前を付けis_logged_in
ますrunning_in_background
。これらの変数が私のスクリプトに設定されていない場合false
。この場合は、通常の文のように、この部分がない場合はよりよく読むので、使用することを[[ running_in_background ]]
好みます。-n
if [[ running_in_background ]] ; then
echo "something" | logger -t myprog
fi
しかし、私の考えではこれはただの好みの問題なので、編集してはいけません。あなたのパスワード。