Na seção 3.1.2.3, intitulada aspas duplas, o manual do Bash diz:
O fechamento de caracteres entre aspas duplas ('"') preserva o valor literal de todos os caracteres entre aspas, com exceção de '$', '`', '\' e, quando a expansão do histórico está ativada, '!'.
No momento, estou preocupado com as aspas simples ( '
).
Seu significado especial, descrito na seção anterior, seção 3.1.2.2 é:
Incluir caracteres entre aspas simples (
'
) preserva o valor literal de cada caractere entre aspas. Uma aspas simples pode não ocorrer entre aspas simples, mesmo quando precedida por uma barra invertida.
Combinando as duas exposições,
echo "'$a'"
onde variável a
não é definida (daí $a
= seqüência nula), deve ser impressa $a
na tela, pois ''
, tendo um significado especial por dentro, protegeria $
da interpretação especial. Em vez disso, ele imprime ''
. Por quê então?
’, ‘\’, and, when history expansion is enabled, ‘!’." in the manual. But now reading it again I realized the second character is not single quote, ("'") but tilde ("
"). I'Você entendeu mal a documentação:
"Ter seu significado especial" significa que é interpretado especialmente não literalmente. Aspas simples impedem a
$
expansão. Porém, aspas simples entre aspas duplas são caracteres literais, ou seja, não afetam nada. Se você deseja a saída$a
, precisaecho '$a'
.fonte