シェル比較で単一等号(=)と二重等号(=)の違いは何ですか?

シェル比較で単一等号(=)と二重等号(=)の違いは何ですか?

内部文字列を比較するには、二重角ifかっこを使用する必要があることをお読みください。いくつかの本では、を通じて比較できると言います=。ただし、これ==にも当てはまります。

#!/bin/bash
a="hello"
b="world"
if [[ $a == $b ]];then
    echo "equal"
fi

=比較してみると、特に違いはありませんか==

ベストアンサー1

bash(その構文をコピーしたksh場所と同様)、比較ではなくパターンマッチングです。バイト間同等比較を実行する必要があります。どんなサポートでも。bash[[ $a == $b ]][[ $a == "$b" ]]===[[...]]

[[...]]標準構文ではありませんsh。これ[ 注文する標準で標準です比較する演算子が存在します=(一部の[実装では1も認識しますが==)。

すべてのコマンドの引数と同様に、変数拡張も引用符で囲む必要があります。分割+グローバル空の削除(後者のみで行われますzsh)なので、次のようになります。

[ "$a" = "$b" ]

標準では、shパターンマッチングは次の方法で行われますcase

case $a in
  ($b) ...
esac

完全性のために平等シェルスクリプトで出会える演算子:

  • [ "$a" -eq "$b" ][10進整数を比較するための標準演算子です。一部[の実装では、数字の周りにスペースを許可し、一部ではランダムな算術式を許可しますが、これは移植可能ではありません。ポータブルで人々が使用できます[ "$(($a))" -eq "$(($b))" ][ "$((a == b))" -ne 0 ]次の標準項目も参照してください(整数定数が含まれている$a場合にのみ動作を指定するPOSIXlyを除く$b)。

  • ((a == b))zshと にある ksh の はbashに格納された算術式が$aと同じ結果で評価される場合 true を返します$b。通常、数値を比較するために使用されます。算術式を評価する方法とサポートされている数には、シェルの間に違いがあります(例:bashとkshのいくつかの実装/バージョンは浮動小数点をサポートしないか、0の前の数字を8進数で処理しません)。

  • expr "$a" = "$b"両方のオペランドが10進整数として認識されている場合(一部は数字の周りに空白を許可する)、数値比較が実行され、そうでない場合、両方の文字列オペランドのソート順序が同じであることが確認されます。$aOR$b演算子の値にもexpr失敗します(...substr

  • awk -- 'BEGIN{exit !(ARGV[1] == ARGV[2])}' "$a" "$b"$a:合計が数字として認識される$b(最小10進整数および1.2、-1.5e-4などの浮動小数点、先行末尾のスペースは無視され、一部は16進数、8進数、または認識されるすべての数字も認識された場合の比較です。) 、かどうかと並べ替えが等しいかどうか。strtod()exprstrcoll()$a$b

また見なさい:


[1 GNUとの組み込み機能が含まれています。[たとえすべてがシェルとに基づいているわけではありませんが、kshbashyashashzshzsh=cmd特殊ファイル名拡張演算子です。(同じコンテキストで拡張されます)はそのコマンドのパスに拡張されるため、機能を無効にするオプションをオフにしない限り、それを作成する必要があり~userます。そうしないと、コマンドが見つからないというエラーが発生します。以下にも適用されます。equals[ "$a" '==' "$b" ]=[ "$string" '=~' "$regexp" ]

おすすめ記事