GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum wird die Tilde (~) nicht innerhalb doppelter Anführungszeichen erweitert?

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.


Linux
  1. Wann sind doppelte Anführungszeichen erforderlich?

  2. Warum ist Printf besser als Echo?

  3. Warum spielt der PC keine DVDs ab??

  4. Warum ist das .bss-Segment erforderlich?

  5. Warum sollte die Größe der Swap-Partition doppelt so groß sein wie die RAM-Größe?

Warum erkennt das Bash-Skript keine Aliase?

Warum funktioniert das ~/.bash_profile nicht?

Platzhalter in Anführungszeichen?

Warum führt „sudo Su“ in einem Shell-Skript den Rest des Skripts nicht als Root aus?

Warum liefert `md5sum` nicht den gleichen Hash wie das Internet?

Warum entfernt Apt-get Autoremove die alten Kernel nicht?