Bash: cadeias de teste, incluindo cifrão

0

Alguém pode explicar o comportamento estranho do cifrão $ no comando de teste?

[ "$a" != "$b" ]
echo $?
1
[ "$a" != "b" ]
echo $?
0

Por que test "$a" != "$b" retorna UM em vez de ZERO?

    
por sci9 25.01.2018 / 14:49

2 respostas

2

$ é um caractere especial no bash que pode ser usado para expandir parâmetros como variáveis ou parâmetros especiais como $? . Se você quiser usá-lo em uma string de aspas duplas, você precisa escapar com um \

$ [ "\$a" != "\$b" ]
$ echo "$?"
0

Ou use aspas simples (dentro das quais nenhum caractere é tratado especialmente) em vez de aspas duplas:

$ [ '$a' != '$b' ]
$ echo "$?"
0
    
por 25.01.2018 / 14:54
1

Como a expressão de teste usa $a e $b entre aspas duplas, o shell irá interpretá-las como variáveis e substituí-las por seus valores.

No seu código, a variável a e b provavelmente não está definida. Isso significa que $a e $b terão o mesmo valor (a string vazia). O teste "$a" != "$b" será, portanto, falso (1).

Se você quiser comparar as strings $a e $b , use, por exemplo, aspas simples em vez de aspas duplas:

if [ '$a' != '$b' ]; then ...; fi

Isso protegerá as strings da expansão de variáveis.

    
por 25.01.2018 / 15:06