2011-11-05 10 views
6

Estoy estudiando scripts bash. Obtuve el script de muestra a continuación desde la web.comparación de cadenas en script bash

#!/bin/bash 

str="test" 

if [ x$str == x"test" ]; then 
    echo "hello!" 
fi 

¿Cuál es x en la quinta línea (x$str y x"test")? ¿Tiene "significado especial" x?

Respuesta

2

Es para asegurarse de que el lado izquierdo de la expresión en su ejemplo no esté vacío. Si no se configuró str, la condición sería [ == "test" ], lo que daría un error.

En lugar de utilizar una sola letra para que no esté vacía, también puede poner la variable dentro de los caracteres de comillas dobles, y omitir el x por completo ([ "$str" == "test" ]).

9

ningún significado especial, pero si $str estaba vacía, entonces el

if [ $str == "test" ] 

se traduciría en un cambio de la nada en la prueba y que sería como este

if [ == "test" ] 

lo que sería una error de sintaxis. La adición de la X delante resolvería esto, sin embargo, citando como este

if [ "$str" == "test" ] 

es una forma más legible y comprensible de conseguir el mismo.

+0

Parece que el ejemplo fue tomado de las pruebas utilizadas para probar una nueva compilación bash, solo la referencia que encontré al método prepend x sostenía que el "" método era mejor y si el caso de prueba debería cambiarse. – ewanm89

+0

Lo que es mejor es una cuestión de gustos: he visto el método x en algunos lugares, y estoy seguro de que hay lugares en las tuberías o sustituciones profundas donde en realidad harían que el código sea más legible, sin embargo, para casos simples como el arriba, el "" es intuitivamente entendido y nunca habría planteado una pregunta. – Soren

+0

Sí, no dije que era mi argumento, dije que era el argumento en la lista de correo de GNU bash. – ewanm89