Nach dieser Antwort und meinem eigenen Verständnis erweitert sich die Tilde in das Home-Verzeichnis:
$ echo ~
/home/braiam
Wann immer ich jetzt möchte, dass die Shell-Erweiterung funktioniert, d. e. Verwenden Sie Variablennamen wie $FOO
, und brechen Sie nicht wegen unerwarteter Zeichen, wie Leerzeichen usw., Sie sollten doppelte Anführungszeichen verwenden "
:
$ FOO="some string with spaces"
$ BAR="echo $FOO"
$ echo $BAR
echo some string with spaces
Warum funktioniert diese Erweiterung nicht mit der Tilde?
$ echo ~/some/path
/home/braiam/some/path
$ echo "~/some/path"
~/some/path
Akzeptierte Antwort:
Der Grund, weil in doppelten Anführungszeichen Tilde ~
hat keine besondere Bedeutung, es wird als wörtlich behandelt.
POSIX definiert doppelte Anführungszeichen als:
Durch das Einschließen von Zeichen in doppelte Anführungszeichen („ “ ) bleibt der
Literalwert aller Zeichen innerhalb der doppelten Anführungszeichen erhalten, mit Ausnahme
der Zeichen Dollarzeichen, Backquote und Backslash,
…
Die Anwendung muss sicherstellen, dass einem doppelten Anführungszeichen ein
umgekehrter Schrägstrich vorangestellt wird, der in doppelte Anführungszeichen eingeschlossen werden muss. Der Parameter ‚@‘ hat
eine besondere Bedeutung in doppelten Anführungszeichen
Außer $ , ` , und @ , andere Zeichen werden als Literal in doppelten Anführungszeichen behandelt.