Warum wird Tilde in diesem Fall nicht als Home-Ordner erkannt?

Warum wird Tilde in diesem Fall nicht als Home-Ordner erkannt?

Das funktioniert nicht:

$ ls "~/.wine/drive_c/tools/Family Tree v2.0"
ls: cannot access '~/.wine/drive_c/tools/Family Tree v2.0': No such file or directory

Aber das tut es:

$ ls "/home/daniel/.wine/drive_c/tools/Family Tree v2.0"
Dossiers                           Dossiers_orig   Infos.opt      Racines.exe  'Register OCX.bat'   racines.CNT
Dossiers-2019.11.03-11.46.tar.gz   Html            REGSVR32.exe   Racines.hlp   Uninst.isu          readme.txt

Wenn man davon ausgeht, dass dies ~dasselbe sein soll wie /home/daniel, was ist hier los?

Antwort1

Durch Anführungszeichen, auch mit doppelten Anführungszeichen, wird die Tilde-Erweiterung unterdrückt.

~kann verwendet werdenals Pfad zu Ihrem Home-Verzeichnisin Kontexten, in denenTilde-Erweiterungdurchgeführt wird. ~ist nicht wie.oder... Es gibt in Ihrem Dateisystem eigentlich keine Einträge, ~die als alternative Namen für Ihr Home-Verzeichnis dienen.

Wenn ~es allein oder als erste Komponente eines Pfades erscheint, erweitert Ihre Shell es in einabsoluter Pfadzu Ihrem Home-Verzeichnis. Dies geschieht jedoch nicht, wenn ~in Anführungszeichen steht.Anführungszeichenbieten eine schwächere Form vonzitierenalsEinzelzitate, was wichtig ist für einige andere Arten vonErweiterung, wie zum BeispielParametererweiterung(das erweitert $HOME). Aber auch doppelte Anführungszeichen unterdrücken die Tilde-Erweiterung.

Daher ~wurde in diesem Befehl nicht erweitert, wo es zitiert wird:

ls "~/.wine/drive_c/tools/Family Tree v2.0"

Glücklicherweise ist es erlaubt, ein Argument zu schreiben, von dem einige Teile zitiert sind und andere nicht. Sie können also ~/vor die Anführungszeichen setzen und trotzdem den Rest zitieren:

ls ~/".wine/drive_c/tools/Family Tree v2.0"

Da die Parametererweiterung sogar in doppelten Anführungszeichen erfolgt (aber nicht in einfachen Anführungszeichen), können Sie auch Folgendes verwenden:

ls "$HOME/.wine/drive_c/tools/Family Tree v2.0"

(Technisch gesehen ist das anders, denn selbst wenn die HOMEUmgebungsvariable nicht gesetzt ist, versuchen manche Shells trotzdem, Ihr Home-Verzeichnis herauszufinden und ~dorthin zu erweitern – und dies bashist eine solche Shell. Aber es kommt selten vor und ist auch nicht ratsam, die Umgebungsvariable nicht zu HOMEsetzen.)


Weiterführende Literatur:

verwandte Informationen