web-dev-qa-db-fra.com

Devis simple entre guillemets doubles et manuel de référence Bash

Dans la section 3.1.2.3 intitulée Double Quotes, le manuel Bash dit:

Le fait de mettre des caractères entre guillemets doubles ("" ") préserve la valeur littérale de tous les caractères entre guillemets, à l'exception de" $ "," "", "\" et, lorsque l'expansion de l'historique est activée, "!".

Pour le moment, je suis préoccupé par la citation unique (').

Sa signification particulière, décrite dans la section précédente, la section 3.1.2.2 est:

Mettre des caractères entre guillemets simples (') conserve la valeur littérale de chaque caractère entre guillemets. Un guillemet simple ne peut pas apparaître entre guillemets simples, même lorsqu'il est précédé d'une barre oblique inverse.

Combinant les deux expositions,

 echo "'$a'"

où la variable a n'est pas définie (d'où $a = chaîne nulle), devrait afficher $a à l'écran, comme '', ayant sa signification particulière à l'intérieur, protégerait $ de l'interprétation spéciale. Au lieu de cela, il imprime ''. Pourquoi

19
Lavya

Le ' guillemet simple dans votre exemple echo obtient sa valeur littérale (et perd sa signification) lorsqu'il est placé entre guillemets doubles ("). Les caractères englobants sont les guillemets doubles.

Ce que vous pouvez faire est d'imprimer les guillemets simples séparément:

echo "'"'$a'"'"

ou échapper au $:

echo "'\$a'"
23
Anthon

Vous comprenez mal la documentation:

avoir sa signification spéciale à l'intérieur, protégerait $ de l'interprétation spéciale

"Ayant sa signification particulière" signifie qu'il est interprété spécialement pas littéralement. Les guillemets simples empêchent $ d'être agrandi. Mais les guillemets simples entre guillemets doubles sont des caractères littéraux, c'est-à-dire qu'ils n'affectent rien. Si vous voulez la sortie $a alors vous avez besoin de echo '$a'.

6
Hauke Laging