Seule citation entre guillemets doubles et le manuel de reference Bash

Dans la section 3.1.2.3 intitulée Citations doubles, le manuel Bash dit:

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

En ce moment, je suis préoccupé par la citation unique ( ' ).

C'est une signification spéciale, décrite dans la section précédente, la section 3.1.2.2 est:

L'inclusion de caractères entre apostrophes ( ' ) préserve la valeur littérale de chaque caractère entre guillemets. Un guillemet simple peut ne pas se produire entre guillemets simples, même lorsqu'il est précédé par une barre oblique inverse.

En combinant les deux expositions,

  echo "'$a'" 

où la variable a n'est pas définie (d'où $a = string nulle), devrait imprimer $a sur l'écran, car '' , ayant une signification particulière à l'intérieur, protégerait $ de l'interprétation spéciale. Au lieu de cela, il imprime '' . Pourquoi donc?

Le ' guillemet simple dans votre exemple d' echo obtient la valeur littérale (et perd sa signification) comme il est entre guillemets ( " ). 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 à la $ :

 echo "'\$a'" 

Vous comprenez mal la documentation:

ayant son sens spécial à l'intérieur, protégerait $ de l'interprétation spéciale

"Ayant son sens spécial" signifie qu'il est interprété spécialement pas littéralement. Les guillemets simples empêchent l'expansion de $ . Mais les guillemets 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 d' echo '$a' .