`[...]`の `==`がzshとbashで異なる動作をするのはなぜですか?

`[...]`の `==`がzshとbashで異なる動作をするのはなぜですか?

これを実行したときに期待した結果が得られましたbash

[ "a" == "a" ] && echo yes

それは私に与えられましたyes

ただし、でこれを行うと、zsh次の結果が表示されます。

zsh: = not found

同じコマンド(/usr/bin/[)が異なるシェルで異なる動作をするのはなぜですか?

ベストアンサー1

/usr/bin/[それはどんな殻にもありません。 Bashでは次のように使用します。組み込みtest/[コマンド同様に、zshでも

違いは次のとおりです。=zshには拡張機能もあります=foo実行可能ファイルのパスを展開しますfoo。これは意味する===コマンドから呼び出されたコマンドを見つけようとして処理されます。PATH。コマンドが存在しないため、エラーが発生します。

zsh: = not found

ご存知のように(実際に実際に使用しても同じことが起こります/usr/bin/[)。


あなたできる==本当に必要な方はこちらをご利用ください。これはzshで期待どおりに機能します。

[ "a" "==" "a" ] && echo yes

参照によって=word拡張機能が実行されないためです。を使用してこのequalsオプションを無効にすることもできますsetopt noequals


ただし、次のようにすることをお勧めします。

  • 使用順序=、POSIX準拠の平等テスト;または
  • もっと良いことは、[[条件文を次のように使用してください。==同時に吹くそして扱いにくい。一般に、[[これらの問題(およびその他の問題)を回避するには、内部的に特殊な解析規則を含める方が良いと安全です。

おすすめ記事