2010-04-08 6 views

Répondre

71

Vous devez utiliser == dans les comparaisons numériques dans ((...)):

$ if ((3 == 3)); then echo "yes"; fi 
yes 
$ if ((3 = 3)); then echo "yes"; fi 
bash: ((: 3 = 3 : attempted assignment to non-variable (error token is "= 3 ") 

Vous pouvez utiliser des comparaisons de chaînes dans [[ ... ]] ou [ ... ] ou test:

$ if [[ 3 == 3 ]]; then echo "yes"; fi 
yes 
$ if [[ 3 = 3 ]]; then echo "yes"; fi 
yes 
$ if [ 3 == 3 ]; then echo "yes"; fi 
yes 
$ if [ 3 = 3 ]; then echo "yes"; fi 
yes 
$ if test 3 == 3; then echo "yes"; fi 
yes 
$ if test 3 = 3; then echo "yes"; fi 
yes 

"Les comparaisons de chaînes?", vous dites?

$ if [[ 10 < 2 ]]; then echo "yes"; fi # string comparison 
yes 
$ if ((10 < 2)); then echo "yes"; else echo "no"; fi # numeric comparison 
no 
$ if [[ 10 -lt 2 ]]; then echo "yes"; else echo "no"; fi # numeric comparison 
no 
+3

Vous ne devriez pas utiliser '==' avec '[' ou 'test', cependant. '==' ne fait pas partie de la spécification POSIX et ne fonctionnera pas avec tous les shells ('dash', en particulier, ne le reconnaît pas). – chepner

+3

@chepner: C'est vrai, mais la question concerne spécifiquement Bash. –

29

Il existe une différence subtile en ce qui concerne POSIX. Extrait du Bash reference:

string1 == string2
Vrai si les chaînes sont égales. = peut être utilisé à la place de == pour une conformité POSIX stricte.

+0

Aucune différence dans bash cependant? Juste un problème de portabilité? –

+0

@ T.E.D .: Non, voir ma réponse. –

Questions connexes