2010-07-16 14 views
103

En bash, ¿cuál es la diferencia, si existe, entre los operadores de prueba igual e igual de doble?igualdad de cadena de bash

[[ "a" = "a" ]] && echo equal || echo not-equal 
[[ "a" == "a" ]] && echo equal || echo not-equal 
[[ "a" = "b" ]] && echo equal || echo not-equal 
[[ "a" == "b" ]] && echo equal || echo not-equal 

resultados en:

equal 
equal 
not-equal 
not-equal 

Respuesta

97

No hay diferencia, == es un sinónimo de = (porque el pueblo C/C++, supongo). Ver here, por ejemplo.

Se podría doble comprueba sólo para estar seguro de realmente o simplemente por su interés por mirar el bash source code, debe estar en algún lugar del código de análisis allí, pero no lo encontró inmediatamente.

+19

No hay diferencia para las comparaciones * string *, pero no puede usar '=' para las comparaciones numéricas en '(())' (debe usar '==' en '(())' o '-eq 'in' [] ',' test' o '[[]]'. Ver mi respuesta [aquí] (http://stackoverflow.com/questions/2600281/what-is-the-difference-between-operator-and -in-bash/2601583 # 2601583). –

+21

También vale la pena señalar que == se introdujo en bash, pero bourne shell no lo admite. En algunos sistemas, notará que/bin/sh es en realidad bash, y en otros sistemas, es bourne. Me encontré con ese problema cuando un script de shell funcionó correctamente en varios sistemas, pero falló en uno. El == no admitido en bourne fue la razón por la que falló en el uno. – Joe

+4

Nota, en ksh si lo marca la sintaxis, obtienes una advertencia de depreciación con la sintaxis single =. warning: línea 3: '=' obsoleto, usa '==' ' – brianegge