Bash: o que é a atribuição `a=` definida?

Bash: o que é a atribuição `a=` definida?

No bash, se eu fizer uma tarefa

a=

O que é aagora? Tenho certeza de que a não é ''string e não 0.

Eu descobri que apenas o teste abaixo é verdadeiro

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

Responder1

É a string vazia.

É o mesmo que fazer:

a=''

Ou

a=""

Ou

a=$''

Ou para isso importa:

a=''""$''

Aqueles '', ""e $'...'estão citando operadores para o shell. Quando você faz:

a=''

Você não está atribuindo uma string composta por dois caracteres de aspas simples, $amas sim uma string vazia. Eles ''são supérfluos, pois não há nada dentro deles, mas podem tornar seu código um pouco mais legível (deixe mais claro que você pretendia atribuir uma string vazia).

Para atribuir um literal ''a $a, você precisa citar caracteres especiais como:

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

Seu comando de teste é inválido. Em

[ $a = ]

Como você esqueceu de citar $a, o operador split+glob é aplicado a $a. Since $aestá vazio (mas seria o mesmo se contivesse apenas espaços em branco ou novas linhas com o valor padrão de $IFS) que resulta em nenhum argumento a ser passado para o [comando.

Portanto , todos os argumentos [recebidos são [e . Pois , isso é um teste para saber se é uma string não vazia e retorna verdadeiro.=][=

O que você quer aqui é passar estes argumentos para o [comando:

  1. [
  2. o conteúdo $apara o qual você precisa"$a"
  3. =
  4. a string vazia. Para o qual você precisa ''ou ""... Passar nada significaria que nenhum argumento seria passado, [então o quarto argumento seria o fechamento ].
  5. ]

Então deveria ser:

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

Ou:

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

Responder2

Variável a é igual a string vazia.

a=

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

A saída é:

$ . tst.sh  
good

E para este código:

a=

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

A saída é a mesma.

informação relacionada