これを実行したときに期待した結果が得られました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準拠の平等テスト;または - もっと良いことは、
[[
条件文を次のように使用してください。==
同時に吹くそして扱いにくい。一般に、[[
これらの問題(およびその他の問題)を回避するには、内部的に特殊な解析規則を含める方が良いと安全です。