zshのマニュアルページは、test
(別名[
)セクションでこの項目を使用しないことを明示的に推奨し、読者が[[
可能な場合はいつでもそれを使用することをお勧めします。
これ関連部品状態:
このコマンドは、POSIX と指定された拡張を実装しようとします。残念ながら、構文には本質的なあいまいさがあります。特に、テスト演算子に似た文字列に違いはありません。標準は、少数のパラメータ(最大4つ)の問題を解決しようとします。 5つ以上のパラメータについては互換性を信頼できません。
[[
可能な限り、これらのあいまいさが存在しない場合は、テストの構文を使用するようにユーザーにお勧めします。
同様のbashのアドバイスを見たようですが、bashのマニュアルページを見てみると、[
どの形式(または)を使用するかについての「正式な」アドバイスが見つかりませんでした。[[
(おそらく私が逃したのではないでしょうか?)
理由がありますか?「古いシェル」との下位互換性に加えて
[
、bashスクリプトに使用されますか?それとも別の理由でbashが[
持続しますか?[[
その他以前のバージョンとの互換性よりも?
ベストアンサー1
しかし、まだいくつかの微妙な違いがあります。
#!/bin/bash
eg=whatever
if [ $eg == what* ]; then # file glob test
echo '[]'
fi
if [[ $eg == what* ]]; then # pattern match test
echo "[[]]"
fi
現在のディレクトリに「whatever」というファイルがない場合、最初のテストは現在のディレクトリの内容のファイルglobと一致するためパスできませんが、2番目のテストは実際の文字列パターンの一致であるためです。