web-dev-qa-db-fra.com

Linux Shell programmation programmation chaîne de syntaxe de comparaison

Quelle est la différence entre = et == pour comparer les chaînes dans la programmation Linux Shell?

Peut-être que le code suivant fonctionne:

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

Mais je pense que ce n'est pas une syntaxe correcte. Il serait utilisé pour comparer la chaîne par == déclaration.

Qu'est-ce qui est correct?

17
jeon

Ces pages expliquent les différents opérateurs de comparaison dans bash:

Sur la deuxième page liée, vous trouverez:

==

    is equal to

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

    This is a synonym for =.
4
Darhuuk

L'égale unique est correcte

string1 == string2

chaîne1 = chaîne2

Vrai si les chaînes sont égales. ‘=’ Doit être utilisé avec la commande de test de conformité POSIX

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

En général, l'opérateur = fonctionne de la même manière que == lors de la comparaison de chaînes.

Remarque: L'opérateur de comparaison == se comporte différemment dans un test entre crochets et entre crochets simples.

[[ $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).

source: http://tldp.org/LDP/abs/html/comparison-ops.html

11
Finer Recliner

vous pouvez jeter un oeil ici ou ici . Personnellement, pour comparer les chaînes, j'utilise case

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

Je n'ai pas besoin de savoir quel opérateur utiliser

1
bash-o-logist