Bash operador unario esperado
Resuelto
Hola,
Soy principiante en bash y estoy tratando de hacer un script muy simple que solo se detenga cuando el usuario diga sí.
Me da el error:
Sé que es sencillo, pero he buscado y no he encontrado, si alguien pudiera explicarme, gracias.
Soy principiante en bash y estoy tratando de hacer un script muy simple que solo se detenga cuando el usuario diga sí.
#!/bin/bash until [ $var = 'sí' ] do read -p 'di sí : ' var done
Me da el error:
línea 3 : [: = : operador unario esperado.
Sé que es sencillo, pero he buscado y no he encontrado, si alguien pudiera explicarme, gracias.
1 respuesta
-
Hola
Explicación del problema
En tu ejemplo,var
no está inicializada,$var
se sustituye por "nada", lo que da la prueba:
until [ = 'sí' ] do ... done
De ahí el error:=
es un operador binario (un operando izquierdo, un operando derecho) y por tanto bash te dice que a la riguroso puede tomar un operador unario (por ejemplo!
)... pero no binario.
Cómo resolver tu problema
Hay que:
- o bien que compruebes previamente sivar
es una cadena no vacía (prueba-z
)
- o bien (lo que te recomiendo) poner$var
entre comillas cada vez que lo evalúes en una prueba.
Personalmente, yo prefiero la segunda solución. De manera general, una cadena de caracteres en bash puede contener espacios, y te encontrarás con el mismo tipo de problema si no tomas esta precaución.
#!/bin/bash until [ "$var" = 'sí' ] do read -p 'di sí: ' var done exit 0
Prueba:
(mando@aldur) (~) $ sh toto.sh
di sí:
di sí: no
di sí: sí sí
di sí: sí
Buena suerte