2009-09-09 19 views
5

Estoy intentando actualizar un script bash escrito por otra persona y he llegado al otro lado de una línea de la que no estoy seguro.Prueba de script Shell

Puede alguien decirme lo que hace la siguiente comprobación:

if [ :$RESULT != :0,0 ] 

supongo que comprueba si hay algún valor en $ RESULTADO, posiblemente con una subcadena?

Cualquier ayuda apreciada!

Respuesta

4

Creo que el : es un truco común que las personas usan en caso de que la variable esté vacía.

Si está vacío, entonces la cáscara tendría esto:

if [ != 0,0 ] 

que sería un error de sintaxis. Poner el : delante significa que si la variable está vacía la cáscara tiene esta:

if [ : != :0,0 ] 

que no es un error de sintaxis y haría (correctamente) informe falso.

11

El comando [ es sólo un alias del comando test, el corchete de cierre sólo estar azúcar sytax (el comando [ ignora el último argumento si es un paréntesis de cierre), por lo que la línea realmente lee

if test :$RESULT != :0,0 

Compara si la cadena :$RESULT es igual a la cadena :0,0. El dos puntos se antepone para el caso en que la variable $RESULT esté vacía. La línea se vería como la siguiente si el colon se omitió y $RESULT era una cadena vacía:

if test != 0,0 

Esto llevaría a un error, ya que espera un argumento de test antes !=. Una alternativa sería utilizar comillas para indicar que hay un argumento, que es una cadena vacía:

if test "$RESULT" != 0,0 
# Will become 
if test "" != 0,0 

La variación informados es más portátil, sin embargo.

+0

Pruebe 'hombre bash' y la búsqueda de la orden interna' test' para más información – soulmerge

+0

Vale, sigue eso, gracias! ¿En realidad se está comparando con la cadena "0,0"?Solo pregunto porque el resultado de la variable nunca tendrá ese valor. Me pregunté si el 0,0 hace algo más. ¿Una cuerda en blanco tal vez? –

+0

No, '0,0' es una cadena y el operador'! = 'Compara cadenas, por lo que comprueba si' $ RESULT' es la cadena '0,0'. Prueba 'hombre prueba '. – soulmerge

1

A veces verá un x utilizado en la forma en que se utilizan los dos puntos en su ejemplo.

La forma preferida de hacer este tipo de prueba en Bash es utilizar el soporte de doble cuadrado:

if [[ $RESULT != 0,0 ]] 

La forma doble soporte permite una mayor flexibilidad, una mejor legibilidad, menor necesidad de escapar y citando y unos pocos más características. Consulte this page para obtener más información.

Si quieres poner a prueba los valores numéricos, en lugar de secuencias o los archivos, utilice los paréntesis dobles:

if ((3 + 4 > 6))