条件式で「==」と「=」の違いは何ですか?

条件式で「==」と「=」の違いは何ですか?

bash マニュアルの条件式の場合

string1 == string2
string1 = string2

文字列が等しい場合は真です。

  1. このコマンドと組み合わせて使用​​すると、上記のように[[パターンマッチングが実行されます(10ページの3.2.4.2セクション「条件付き構造」を参照)。

    • ここで「パターンマッチング」とはどういう意味ですか?

    • ここで「パターンマッチング」は何に該当するのか?

    • [[「this」を他のコマンド以外のコマンドと一緒に使用するとどうなりますか?

  2. test'='はposixの一貫性のためのコマンドと一緒に使用する必要があります。

    • POSIXはここで何を言いますか?

    • 異議申し立ては何ですか?

    • コマンドを==使用できますか?test私はそれを試してみました。

    • この命令に加えて=他の命令と一緒に使用できますかtest?試してみましたが=効果があるようです。[[[

  3. ==これらとの違いは何ですか=

    Bash 4.3 では、 と とともに==and を使ってみました。私が見るのと同じようです。=test[[[===

    条件式で入れ替えて使用できますか===

ありがとうございます。

ベストアンサー1

POSIXtest(または[ ... ])は1つの等号だけを知っています。

s1= s2 は、
文字列 s1 と s2 が等しい場合は真で、そうでなければ偽です。

しかし、Bashは二重等号も受け入れますが、組み込みのヘルプではこれを認めません(手動する):

$ help test | grep -A1 =
  STRING1 = STRING2
                 True if the strings are equal.
  STRING1 != STRING2
                 True if the strings are not equal.

他の殻は状況によって異なります。まあ、特にダッシュはここで最も頑固な人です。

$ dash -c '[ x == x ] && echo foo'
dash: 1: [: x: unexpected operator

しかし、

$ yash -c '[ x == x ] && echo foo'
foo
$ busybox sh -c '[ x == x ] && echo foo'
foo
$ ksh93 -c '[ x == x ] && echo foo'
foo

真ん中zsh=something一つですファイル名拡張子something演算子は、 にある場合、そのオプションがオフになっていない限り(たとえば、他のシェルをエミュレートするなど)、コマンドのパスに展開され、単純なコマンドの引数に適用されるか、適用$PATHされる場合にも適用されます。たとえば、少なくとも先行コマンドを引用する必要があります。 :equals===~test[=

$ zsh -c 'echo =ls'
/usr/bin/ls

$ zsh +o equals -c 'echo =ls'
=ls

$ zsh --emulate ksh -c 'echo =ls'
=ls

$ zsh -c '[ x == x ] && echo foo'
zsh:1: = not found

$ zsh -c '[ x "==" x ] && echo foo'
foo

私のDebianでGNU coreutilsの外部test/ utilサポート(しかし[==手動これを認めません。 OS Xではそうではありません。

したがって、test/を使用するときはより幅広くサポートされますので[ .. ]ご使用ください。=


とともに[[ ... ]]構造、およびは=すべて==同じで(少なくともBashでは)、演算子の右側が引用されない限り、ファイル名globと同様にパターンとして扱われます。 (ファイル名は内部的には拡張されません[[ ... ]]。)

$ bash -c '[[ xxx == x* ]] && echo foo'
foo

ただし、もちろんこの構成は標準ではありません。

$ dash -c '[[ xxx == x* ]] && echo foo'
dash: 1: [[: not found
$ yash -c '[[ xx == x* ]] && echo foo'
yash: no such command ‘[[’

Busyboxにはありますが、パターンマッチングは行いません。

$ busybox sh -c '[[ xx == xx ]] && echo yes || echo no'
yes
$ busybox sh -c '[[ xx == x* ]] && echo yes || echo no'
no

おすすめ記事