Aspas simples entre aspas duplas e o manual de referência do Bash

18

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 anão é definida (daí $a= seqüência nula), deve ser impressa $ana tela, pois '', tendo um significado especial por dentro, protegeria $da interpretação especial. Em vez disso, ele imprime ''. Por quê então?

Lavya
fonte

Respostas:

21

O 'caractere de aspas simples no seu echoexemplo obtém o valor literal (e perde o significado), como é colocado entre aspas duplas ( "). Os caracteres anexos são aspas duplas.

O que você pode fazer é imprimir as aspas simples separadamente:

echo "'"'$a'"'"

ou escape do $:

echo "'\$a'"
Anthon
fonte
Oh, você está totalmente certo! A saída é consistente com a sua resposta, mas minha dúvida foi com a linha "Incluir caracteres entre aspas duplas ('"') preserva o valor literal de todos os caracteres entre aspas, com exceção de '$', ' ’, ‘\’, 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'
sou
2
O segundo caractere mencionado no manual é o backtick, não o til.
precisa saber é o seguinte
6

Você entendeu mal a documentação:

tendo um significado especial por dentro, protegeria $ da interpretação especial

"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, precisa echo '$a'.

Hauke ​​Laging
fonte
você está certo. Eu não apenas entendi errado o documento, mas o interpretei errado (dizer "` "para" '"!). você está certo sobre "aspas simples entre aspas duplas são caracteres literais". Obrigado!
Lavya