Bash: ¿qué se define en la asignación `a=`?

Bash: ¿qué se define en la asignación `a=`?

En bash, si hago una tarea

a=

¿Qué es aahora? Estoy seguro de que a no es ''una cadena y no 0.

Solo encontré la siguiente prueba que es verdadera.

if [ $a = ];then echo 'good';fi

Respuesta1

Es la cadena vacía.

Es lo mismo que hacer:

a=''

O

a=""

O

a=$''

O para eso importa:

a=''""$''

Esos '', ""y $'...'están citando operadores en el shell. Cuando tu lo hagas:

a=''

No está asignando una cadena formada por dos comillas simples, sino $ala cadena vacía. Son ''superfluos ya que no hay nada dentro de ellos, pero eso puede hacer que su código sea un poco más legible (deje más claro que tenía la intención de asignar una cadena vacía).

Para asignar un literal ''a $a, deberás citar esos caracteres especiales como:

a="''" a=\'\' a=$'\'\'' a="'"\'

Su comando de prueba no es válido. En

[ $a = ]

Como olvidó citar $a, se aplica el operador split+glob a $a. Dado que $aestá vacío (pero sería lo mismo si solo contuviera espacios en blanco o líneas nuevas con el valor predeterminado de $IFS), eso da como resultado que no se pase ningún argumento al [comando.

Entonces todos los argumentos [que recibe son [, =y ]. Para [, esa es una prueba para saber si =es una cadena que no está vacía y devuelve verdadero.

Lo que quieres aquí es pasar estos argumentos al [comando:

  1. [
  2. el contenido del $acual necesitas"$a"
  3. =
  4. la cadena vacía. Para lo que necesita ''o ""... No pasar nada significaría que no se pasa ningún argumento, [por lo que el cuarto argumento sería el cierre ].
  5. ]

Entonces debería ser:

if [ "$a" = '' ]; then echo '$a is empty'; fi

O:

if [ -z "$a" ]; then echo '$a is empty'; fi

Respuesta2

La variable a es igual a una cadena vacía.

a=

if [ "$a" -eq "" ]; then echo 'good'; fi

La salida es:

$ . tst.sh  
good

Y para este código:

a=

if [ -z "$a" ]; then echo 'good'; fi

La salida es la misma.

información relacionada