Je viens de voir cela dans un script d'initialisation:
echo $"Stopping Apache"
À quoi sert ce signe dollar?
J'ai trouvé cela dans le manuel bash:
extquote
Si défini,
$'string'
et$"string"
la citation est effectuée dans${parameter}
extensions entre guillemets. Cette option est activée par défaut.
... mais je ne trouve aucune différence entre les chaînes avec et sans le $
préfixe:
$ echo "I am in $PWD"
I am in /var/shared/home/southworth/qed
$ echo $"I am in $PWD"
I am in /var/shared/home/southworth/qed
$ echo $"I am in ${PWD}"
I am in /var/shared/home/southworth/qed
$ echo "I am in ${PWD}"
I am in /var/shared/home/southworth/qed
$ echo 'I am in ${PWD}'
I am in ${PWD}
$ echo $'I am in ${PWD}'
I am in ${PWD}
$ echo $'I am in $PWD'
I am in $PWD
Il se passe deux choses différentes ici, toutes deux documentées dans le manuel bash
Le guillemet simple à signe dollar est une forme spéciale de citation:
Les mots de la forme $ 'string' sont traités spécialement. Le mot se développe en chaîne, avec des caractères d'échappement antislash remplacés comme spécifié par la norme C ANSI.
La citation double du signe dollar sert à la localisation:
Une chaîne entre guillemets précédée d'un signe dollar ("$") entraînera la traduction de la chaîne en fonction des paramètres régionaux actuels. Si les paramètres régionaux actuels sont C ou POSIX, le signe dollar est ignoré. Si la chaîne est traduite et remplacée, le remplacement est entre guillemets.
Lorsqu'une chaîne est développée à l'intérieur de $''
, les séquences d'échappement sont interprétées. Depuis la page de manuel:
Words of the form $'string' are treated specially. The Word expands to
string, with backslash-escaped characters replaced as specified by the
ANSI C standard.
Un exemple simple est la séquence d'échappement\n pour une nouvelle ligne:
$ echo 'foo\n'
foo\n
$ echo $'foo\n'
foo
$
Remarque: Vous pouvez obtenir des résultats différents dans d'autres shells car echo
peut interpréter des séquences d'échappement sans fournir d'options.