Selon cette réponse et ma propre compréhension, le tilde se développe dans le répertoire personnel :
$ echo ~
/home/braiam
Maintenant, chaque fois que je veux que l'extension du shell fonctionne, c'est-à-dire. e. en utilisant des noms de variables tels que $FOO
, et ne coupez pas les caractères inattendus, tels que les espaces, etc., vous devez utiliser des guillemets doubles "
:
$ FOO="some string with spaces"
$ BAR="echo $FOO"
$ echo $BAR
echo some string with spaces
Pourquoi cette extension ne fonctionne-t-elle pas avec le tilde ?
$ echo ~/some/path
/home/braiam/some/path
$ echo "~/some/path"
~/some/path
Réponse acceptée :
La raison, parce qu'à l'intérieur des guillemets doubles, tilde ~
n'a pas de signification particulière, il est traité comme littéral.
POSIX définit les guillemets doubles comme :
Les caractères placés entre guillemets doubles (" ") doivent préserver la valeur littérale de tous les caractères entre guillemets doubles, à l'exception
des caractères signe dollar, guillemet inversé et barre oblique inversée,…
L'application doit s'assurer qu'un guillemet double est précédé d'une
barre oblique inverse à inclure dans les guillemets doubles. Le paramètre '@' a
une signification particulière à l'intérieur des guillemets
Sauf $ , ` , et @ , les autres caractères sont traités comme littéraux entre guillemets doubles.