Por que aspas são retidas em variáveis de string quando estão entre aspas simples?

1

Eu precisava manter as aspas duplas em torno de uma variável de string definida em bash para poder passá-la para um dialeto da linguagem de programação Scheme . Minha pergunta é por que as aspas são retidas quando colocadas dentro de outro conjunto de aspas simples? Para ilustrar isso, dou alguns exemplos do meu bash command prompt :

$ str1=hey
$ echo $str1
hey
$ str2="hey"
$ echo $str2
hey
$ str3='hey'
$ echo $str3
hey
$ str4='"hey"'
$ echo $str4
"hey"
$ str5="'hey'"
$ echo $str5
'hey'
$ 
    
por Vesnog 05.02.2015 / 11:16

2 respostas

1

Uma string entre aspas simples manterá a string como literal. Uma string de aspas duplas reterá a string com interpolação e expansão variáveis. Isso é explicado na página man bash - veja a seção intitulada QUOTING

There are three quoting mechanisms: the escape character, single quotes, and double quotes.

A non-quoted backslash (\) is the escape character. It preserves the literal value of the next character that follows, with the exception of {newline}. If a \{newline} pair appears, and the backslash is not itself quoted, the \{newline} is treated as a line continuation (that is, it is removed from the input stream and effectively ignored).

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.

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, !. The characters $ and ' retain their special meaning within double quotes. The backslash retains its special meaning only when followed by one of the following characters: $, ', ", \, or {newline}. A double quote may be quoted within double quotes by preceding it with a backslash. If enabled, history expansion will be performed unless an ! appearing in double quotes is escaped using a backslash. The backslash preceding the ! is not removed.

    
por 05.02.2015 / 11:51
1

Veja a seção sobre cotação no Manual de Referência do Bash .

Basicamente, colocar caracteres entre aspas simples ou duplas os transforma em caracteres literais, sem nenhum significado especial (há algumas exceções para as aspas duplas, mas eles não importam aqui). Portanto, na seqüência de caracteres '"hey"' , as aspas simples "protegem" todos os outros caracteres, e as aspas duplas perdem seu significado especial e são preservadas como caracteres literais.

    
por 05.02.2015 / 11:43