web-dev-qa-db-ja.com

Linux Shellプログラミング文字列比較構文

Linuxシェルプログラミングで文字列を比較するための===の違いは何ですか?

たぶん、次のコードは動作します:

if [ "$NAME" = "user" ]
then
    echo "your name is user"
fi

しかし、それは正しい構文ではないと思います。 ==ステートメントによって文字列を比較するために使用されます。

何が正しいですか?

17
jeon

これらのページでは、bashのさまざまな比較演算子について説明しています。

リンクされている2番目のページには、次のものがあります。

==

    is equal to

    if [ "$a" == "$b" ]

    This is a synonym for =.
4
Darhuuk

単一の等号は正しい

string1 == string2

string1 = string2

文字列が等しい場合は真。 POSIX準拠のテストコマンドでは「=」を使用する必要があります

NAME="rafael"
USER="rafael"
if [ "$NAME" = "$USER" ]; then
    echo "Hello"
fi
23
John Giotta

一般に、=演算子は、文字列を比較するときに==と同じように機能します。

注:==比較演算子の動作は、二重括弧テスト内と単一括弧内では異なります。

[[ $a == z* ]]   # True if $a starts with an "z" (pattern matching).
[[ $a == "z*" ]] # True if $a is equal to z* (literal matching).

[ $a == z* ]     # File globbing and Word splitting take place.
[ "$a" == "z*" ] # True if $a is equal to z* (literal matching).

ソース: http://tldp.org/LDP/abs/html/comparison-ops.html

11
Finer Recliner

here または here をご覧ください。個人的に、文字列を比較するには、caseを使用します

case "$string1" in
  "$string2" ) echo "matched";;
  *) echo "not matched";;
esac

どの演算子を使用すべきかを知る必要はありません

1
bash-o-logist