Hier spielen zwei Dinge eine Rolle. Zunächst wird das -
alleinige Verzeichnis zu Ihrem vorherigen Verzeichnis erweitert. Dies wird im cd
Abschnitt von man bash
(Schwerpunkt Mine) erklärt:
Ein Argument von -
wird in $ OLDPWD konvertiert, bevor der Verzeichniswechsel versucht wird. Wenn ein nicht leerer Verzeichnisname von CDPATH verwendet wird oder wenn -
das erste Argument ist und die Verzeichnisänderung erfolgreich ist, wird der absolute Pfadname des neuen Arbeitsverzeichnisses in die Standardausgabe geschrieben. Der Rückgabewert ist true, wenn das Verzeichnis erfolgreich geändert wurde. sonst falsch.
Ein einfacher Befehl cd -
bringt Sie zurück zu Ihrem vorherigen Verzeichnis und druckt den Namen des Verzeichnisses aus. Der andere Befehl ist im Abschnitt "Tilde Expansion" dokumentiert:
Wenn das Tilde-Präfix a ist ~+
, ersetzt der Wert der Shell-Variablen PWD das Tilde-Präfix. Wenn das Tilde-Präfix a ist ~-
, wird der Wert der Shell-Variablen OLDPWD, falls festgelegt, ersetzt. Wenn die Zeichen, die der Tilde im Tilde-Präfix folgen, aus einer Zahl N bestehen, die optional mit einem +
oder einem -
vorangestellt ist, wird das Tilde-Präfix durch das entsprechende Element aus dem Verzeichnisstapel ersetzt, wie es von den mit aufgerufenen eingebauten Verzeichnissen angezeigt würde das Tilde-Präfix als Argument. Wenn die Zeichen, die der Tilde im Tilde-Präfix folgen, aus einer Zahl ohne führendes +
oder bestehen -
, +
wird angenommen.
Dies könnte anhand eines Beispiels verständlicher sein:
$ pwd
/home/terdon
$ cd ~/foo
$ pwd
/home/terdon/foo
$ cd /etc
$ pwd
/etc
$ echo ~ ## prints $HOME
/home/terdon
$ echo ~+ ## prints $PWD
/etc
$ echo ~- ## prints $OLDPWD
/home/terdon/foo
Im Allgemeinen -
bedeutet das also "das vorherige Verzeichnis". Das ist der Grund, warum Sie cd -
von alleine dorthin zurückgebracht werden, wo Sie waren.
Der Hauptunterschied ist, dass cd -
es spezifisch für den cd
eingebauten ist. Wenn Sie es versuchen, echo -
drucken Sie einfach ein -
. Dies ~-
ist Teil der Tilde-Erweiterungsfunktionalität und verhält sich ähnlich wie eine Variable. Darum kannst du echo ~-
und bekommst etwas Sinnvolles. Sie können es auch in verwenden, cd ~-
aber Sie können es auch in jedem anderen Befehl verwenden. Zum Beispiel cp ~-/* .
wäre das äquivalent zucp "$OLDPWD"/* .
cd ~-
.