Nuestro grupo redactor ha estado por horas buscando respuestas a tus interrogantes, te compartimos la respuestas así que nuestro deseo es serte de mucha apoyo.
Algunos shells históricos implementaron un analizador muy simple que podría confundirse con cosas como [ -n = "" ]
donde el primer operando a =
parece un operador, y analizaría esto como [ -n = ]
o causar un error de sintaxis. En [ "x$1" = x"" ]
los x
prefix asegura que x"$1"
no puede parecerse a un operador, por lo que la única forma en que el shell puede analizar esta prueba es tratando =
como operador binario.
Todos los shells modernos, e incluso la mayoría de los shells más antiguos que todavía están en funcionamiento, siguen las reglas POSIX que exigen que todas las expresiones de prueba de hasta 4 palabras se analicen correctamente. Entonces [ -z "$1" ]
es una forma adecuada de probar si $1
esta vacioy [ "$x" = "$y" ]
es una forma adecuada de probar la igualdad de dos variables.
Incluso algunos shells actuales pueden confundirse con expresiones más largas, y algunas expresiones son realmente ambiguas, así que evite usar el -a
y -o
operadores para construir pruebas booleanas más largas, y en su lugar usar llamadas separadas para [
y la propia concha &&
y ||
operadores booleanos.
Según http://www.mpi-inf.mpg.de/~uwe/lehre/unixffb/quoting-guide.html, el -z
la prueba es inseguro en algunas implementacionespresumiblemente cuando cadenas “interesantes” como "-o a=a"
son probados.
Las pruebas anteriores también generarán un error si se ejecuta con “set -u” o “set -o nounset”
Una forma más estable de buscar una variable vacía sería usar la expansión de parámetros:
MYVAR=$MYVAR:-“Valor incorrecto”
Este método funciona para el shell bourne tradicional, así como para ksh y bash.
Reseñas y puntuaciones de la guía
Tienes la opción de proteger nuestro estudio dejando un comentario o dejando una puntuación te estamos agradecidos.