A diferença de chave entre essas duas seqüências de comando é que a segunda contém echo $b
, que executa a divisão da palavra shell . Para fazer com que a segunda sequência de comandos seja a mesma que a primeira, substitua:
echo $b | grep "*)>nS4XkrlH @XUL"
com:
echo "$b" | grep "*)>nS4XkrlH @XUL"
Divisão de palavras
Observe como os espaços são tratados nessas duas declarações echo
:
$ b="a b c"
$ echo "$b"
a b c
$ echo $b
a b c
Sem as aspas duplas, o shell executa a divisão de palavras nos argumentos para echo
. Isso significa que todos os espaços em branco consecutivos são condensados em um único espaço. Com aspas duplas, a divisão de palavras é suprimida e o espaço em branco é preservado.
Divisão de palavras e um padrão grep
com vários espaços
Seu padrão grep
contém dois espaços consecutivos. A menos que o argumento para echo
esteja entre aspas duplas, a saída de echo
não terá esses dois espaços e nenhuma correspondência será encontrada. Observe:
$ b="*)>nS4XkrlH @XUL"
$ echo $b | grep "*)>nS4XkrlH @XUL"
$ echo "$b" | grep "*)>nS4XkrlH @XUL"
*)>nS4XkrlH @XUL
O primeiro grep
não corresponde a nada, exceto o segundo. A diferença é a divisão de palavras do shell.