Tengo dos variables

var=""
var1=abcd

Aquí está mi script de shell código

if [ $var == $var1 ]; then
  do something
else
  do something
fi

Si ejecuto este código, se le pedirá una advertencia

[: ==: unary operator expected

¿Cómo puedo solucionar esto?

  • El formato de código en un mensaje, resalte y haga clic en el «{}» icono (o una sangría de 4 espacios). Su código fue marcado con > (lo que denota el texto citado, no el formato de código) e innecesario <br> etiquetas. Me fijo.
  • Hay muchas otras preguntas en StackOverflow lidiar con la necesidad de citar las variables, en caso de anular o nulo valor.
  • Sólo un recordatorio: Para indicar que una respuesta a resolver su problema, usted puede hacer clic en la flecha verde para «aceptar» de ella. Que respuesta a aceptar, y si aceptan una respuesta a todo, es totalmente de usted.

2 Comentarios

  1. 84

    Ya que el valor de $var es la cadena vacía, este:

    if [ $var == $var1 ]; then

    se expande a este:

    if [ == abcd ]; then

    que es un error de sintaxis.

    Usted necesita citar los argumentos:

    if [ "$var" == "$var1" ]; then

    También puede utilizar = en lugar de ==; que es la original de la sintaxis, y es un poco más portable.

    Si usted está usando bash, puede utilizar el [[ sintaxis, que no requiere de la cita:

    if [[ $var = $var1 ]]; then

    Incluso entonces, no hace daño a citar la referencia de la variable, y la adición de citas:

    if [[ "$var" = "$var1" ]]; then

    podría salvar a un futuro lector un momento, tratando de recordar si [[]] requiere de ellos.

    • Gracias tio..funcionó bien 🙂 Gracias por la rápida respuesta.
    • Mismo error que vienen en mayor o menor que el operador. Cómo resolver el problema de que como el número de comparación. if [ $var -gt $var1 ]
  2. 0

    Por qué toda la gente que desee usar ‘==’ lugar de simples ‘=’ ? Es un mal hábito! Se utiliza sólo en [[ ]] expresión. Y en (( )) también. Pero usted puede usar simplemente = demasiado! Funciona bien en cualquier caso. Si utiliza los números, no las cadenas de uso no parcing a las cadenas y luego se comparan como cadenas, pero comparar números. como que

    let -i i=5 # garantee that i is nubmber
    test $i -eq 5 && echo "$i is equal 5" || echo "$i not equal 5"

    Es el partido de la mejor y más rápido. Soy experto en C/C++, Java, JavaScript. Pero si puedo usar bash yo nunca use ‘==’ en lugar de ‘=’. ¿Por qué lo haría?

Dejar respuesta

Please enter your comment!
Please enter your name here