Bash: o que é atribuição 'a =' definido?

0

No bash, se eu fizer a atribuição

a=

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

Eu encontrei apenas abaixo do teste é verdade

if [ $a = ];then echo 'good';fi
    
por user15964 27.04.2017 / 10:54

2 respostas

4

É a string vazia.

É o mesmo que fazer:

a=''

Ou

a=""

Ou

a=$''

Ou para isso:

a=''""$''

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

a=''

Você não está atribuindo uma string composta de dois caracteres de aspas simples a $a , mas a string vazia. Aqueles '' são supérfluos já que não há nada dentro deles, mas isso pode deixar seu código um pouco mais legível (deixe claro que você pretendia atribuir uma string vazia).

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

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

Seu comando de teste é inválido. Em

[ $a = ]

Como você se esqueceu de citar $a , o operador split + glob é aplicado a $a . Como $a está vazio (mas isso 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 ] . Para [ , esse é um teste para saber se = é uma string não vazia e retorna true.

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

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

Então deve ser:

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

Ou:

if [ -z "$a" ]; then echo '$a is empty'; fi
    
por 27.04.2017 / 11:07
0

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.

    
por 27.04.2017 / 11:07

Tags