内部文字列を比較するには、二重角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進整数として認識されている場合(一部は数字の周りに空白を許可する)、数値比較が実行され、そうでない場合、両方の文字列オペランドのソート順序が同じであることが確認されます。$a
OR$b
演算子の値にもexpr
失敗します(
...substr
awk -- 'BEGIN{exit !(ARGV[1] == ARGV[2])}' "$a" "$b"
$a
:合計が数字として認識される$b
(最小10進整数および1.2、-1.5e-4などの浮動小数点、先行末尾のスペースは無視され、一部は16進数、8進数、または認識されるすべての数字も認識された場合の比較です。) 、かどうかと並べ替えが等しいかどうか。strtod()
expr
strcoll()
$a
$b
また見なさい:
[
1 GNUとの組み込み機能が含まれています。[
たとえすべてがシェルとに基づいているわけではありませんが、ksh
bash
yash
ash
zsh
zsh
=cmd
特殊ファイル名拡張演算子です。(同じコンテキストで拡張されます)はそのコマンドのパスに拡張されるため、機能を無効にするオプションをオフにしない限り、それを作成する必要があり~user
ます。そうしないと、コマンドが見つからないというエラーが発生します。以下にも適用されます。equals
[ "$a" '==' "$b" ]
=
[ "$string" '=~' "$regexp" ]