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.