2010-04-08 22 views

Respuesta

71

Debe utilizar == en las comparaciones numéricas en ((...)):

$ 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 ") 

, puede usar cualquiera de las comparaciones de cadenas en [[ ... ]] o [ ... ] o 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 

"las comparaciones de cadenas?", ¿tu dices?

$ 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

No deberías usar '==' con '[' o 'test', sin embargo. '==' no es parte de la especificación POSIX, y no funcionará con todas las shells ('dash', en particular, no lo reconoce). – chepner

+3

@chepner: Eso es cierto, pero la pregunta es específicamente sobre Bash. –

29

Hay una diferencia sutil con respecto a POSIX. Extracto de la Bash reference:

string1 == string2
Verdadero si las cadenas son iguales. = se puede usar en lugar de == para cumplir estrictamente con POSIX.

+0

No hay diferencia en bash sin embargo? ¿Solo un problema de portabilidad? –

+0

@ T.E.D .: No, mira mi respuesta. –

Cuestiones relacionadas