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

11

Na seção 3.1.2.3 intitulada Double Quotes, o manual do Bash diz:

Enclosing characters in double quotes (‘"’) preserves the literal value of all characters within the quotes, with the exception of ‘$’, ‘'’, ‘\’, and, when history expansion is enabled, ‘!’.

No momento, estou preocupado com a cotação única ( ' ).

O seu significado especial, descrito na seção anterior, seção 3.1.2.2 é:

Enclosing characters in single quotes (') preserves the literal value of each character within the quotes. A single quote may not occur between single quotes, even when preceded by a backslash.

Combinando as duas exposições,

 echo "'$a'"

onde variável a não está definida (portanto $a = string nula), deve imprimir $a na tela, pois '' , tendo seu significado especial dentro, protegeria $ da interpretação especial . Em vez disso, imprime '' . Por que isso?

    
por Lavya 23.11.2014 / 11:20

2 respostas

16

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

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

echo "'"'$a'"'"

ou escape do $ :

echo "'\$a'"
    
por 23.11.2014 / 11:40
5

Você entendeu mal a documentação:

having it's special meaning inside, would shield $ from the special interpretation

"Tendo seu significado especial" significa que é interpretado especialmente não literalmente. Aspas simples impedem que $ seja expandido. Mas as aspas simples entre aspas duplas são caracteres literais, ou seja, elas não afetam nada. Se você quiser a saída $a , precisará de echo '$a' .

    
por 23.11.2014 / 11:48