Erweitern Sie ~ ,. und `..`

7

Da ~, .und ..sind spezielle Verzeichnisse, warum sind sie unterschiedlich im folgende Beispiel behandelt?

$ echo ~
/home/tim
$ echo ..
..
$ echo .
.
  1. ~ wird in das Verzeichnis erweitert, die anderen beiden jedoch nicht.
  2. Die anderen beiden sind buchstäblich erweitert, aber ~nicht.
Tim
quelle
8
~ist kein Verzeichnis, es ist ein Konstrukt Ihrer Shell und existiert nicht wirklich.
Casey
.ist auch nicht (der Name) eines Verzeichnisses, sondern ~bezieht sich auf Ihr Ausgangsverzeichnis, wie .auf das aktuelle Verzeichnis und ..auf das übergeordnete Verzeichnis.
Bilderstürmer

Antworten:

18

~ist ein spezieller Name, der von der Shell erweitert wird, .und ..es handelt sich um echte richtige Verzeichnisnamen, sodass die Shell dort keine Erweiterung vornimmt.

Ulrich Schwarz
quelle
4
Geben Sie beispielsweise ein ls -aund Sie sehen die Verzeichnisse .und ... Der einzige Grund, warum sie normalerweise nicht angezeigt werden, ist, dass alles, was mit beginnt, .standardmäßig ausgeblendet ist.
Nutzlos
4
Eine andere Möglichkeit, den Unterschied zu erkennen, besteht darin, ihn in Anführungszeichen zu setzen: ls -ld '~'Gibt einen Fehler aus (es sei denn, ~im aktuellen Verzeichnis befindet sich eine Verzeichnisdatei), während ls -ld '.'Informationen zum aktuellen Verzeichnis angezeigt werden.
Celtschk
+1 Könnte auch nützlich sein, um die Tatsache zu erwähnen, dass .es sich um eine feste Verbindung zum aktuellen Verzeichnis und ..um eine feste Verbindung zum übergeordneten Verzeichnis des aktuellen Verzeichnisses handelt.
Joseph R.
.ist kein Verzeichnisname, es sei denn, Sie gebenmkdir '.'
iconoclast