Saltar al contenido

Error “operador unario esperado” en la condición Bash if

Nuestro team de especialistas despúes de algunos días de trabajo y de recopilar de datos, dieron con la respuesta, nuestro deseo es que resulte de utilidad en tu plan.

Solución:

Si sabe que siempre va a usar bash, es mucho más fácil usar siempre el comando compuesto condicional de doble corchete [[ ... ]], en lugar de la versión de soporte único compatible con Posix [ ... ]. Dentro de una [[ ... ]] la expansión compuesta, la división de palabras y la ruta de acceso no se aplican a las palabras, por lo que puede confiar en

if [[ $aug1 == "and" ]];

para comparar el valor de $aug1 con el string and.

Si utiliza [ ... ], siempre debe recordar comillas dobles variables como esta:

if [ "$aug1" = "and" ];

Si no cita la expansión de la variable y la variable no está definida o está vacía, desaparece de la escena del crimen, dejando solo

if [ = "and" ]; 

que no es una sintaxis válida. (También fallaría con un mensaje de error diferente si $aug1 incluido espacio en blanco o metacaracteres de shell.)

El moderno [[ operator has lots of other nice features, including regular expression matching.

Took me a while to find this but note that if you have a spacing error you will also get the same error:

[: =: unary operator expected

Correct:

if [ "$APP_ENV" = "staging" ]

vs

if ["$APP_ENV" = "staging" ]

Como siempre ambientando -x La variable de depuración ayuda a encontrar estos:

set -x

Intente asignar un valor a $aug1 antes de usarlo en if[] declaraciones; el mensaje de error desaparecerá después.

Aquí puedes ver las comentarios y valoraciones de los lectores

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *