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 HOME
Umgebungsvariable nicht gesetzt ist, versuchen manche Shells trotzdem, Ihr Home-Verzeichnis herauszufinden und ~
dorthin zu erweitern – und dies bash
ist eine solche Shell. Aber es kommt selten vor und ist auch nicht ratsam, die Umgebungsvariable nicht zu HOME
setzen.)
Weiterführende Literatur: