2011-04-21 24 views
16

¿Cuál es la diferencia entre = y == para comparar cadenas en la programación del shell de Linux?cadena de programación del shell de Linux compare la sintaxis

Tal vez el siguiente código funciona:

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

Pero yo creo que no es una sintaxis correcta. Se usaría para comparar cadena por instrucción ==.

¿Qué es correcto?

Respuesta

4

Estas páginas explican los diversos operadores de comparación en bash:

En la segunda página del enlace, se encuentran:

== 

    is equal to 

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

    This is a synonym for =. 
+2

[esto ha llegado hasta] (http://meta.stackexchange.com/questions/15650/ban-lmgtfy-let-me-google-that-for-you -links) Este comentario fue hecho antes de sus varias revisiones en su respuesta – Diarmaid

+0

@Diarmaid Sabía que esto pasaría :). ¿Mi respuesta es grosera? Tal vez, claro, simplemente perdí el tiempo leyendo una pregunta que tarda 10 segundos en buscar en Google para encontrar la respuesta. De todos modos, también me tomé el tiempo para escribir una respuesta correcta. Entonces ahora el OP obtuvo su respuesta y un amable recordatorio para buscar primero. – Darhuuk

+0

Ese primer ejemplo de tech-recipes.com no funcionó para mí debido a que faltaba un punto y coma (¿o una nueva línea?). – FruitBreak

23

El único igual es correcto

cadena1 == cadena2

cadena1 = cadena2

Verdadero si las cadenas son iguales. ‘=’ Se debe utilizar con el comando test de conformidad POSIX

NAME="rafael" 
USER="rafael" 
if [ "$NAME" = "$USER" ]; then 
    echo "Hello" 
fi 
+1

Referencia: http://www.gnu.org/software/bash/manual/html_node/Bash-Conditional-Expressions.html#Bash-Conditional-Expressions – splaer

1

se puede echar un vistazo here o here. En lo personal, para comparar cadenas, yo uso case

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

no tengo que saber qué operador debería usar

10

En general, el operador = funciona igual que == al comparar cadenas.

Nota: El operador de comparación == se comporta de manera diferente dentro de una prueba de paréntesis doble que entre paréntesis.

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

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

+0

¡Gracias por esto! Estaba luchando con un problema donde había usado corchetes simples en lugar de dobles. – cbowns

Cuestiones relacionadas