Der Bash-Befehl
cd -
druckt das zuvor verwendete Verzeichnis und wechselt dorthin.
Auf der anderen Seite der Bash-Befehl
cd ~-
Wechselt direkt in das zuvor verwendete Verzeichnis, ohne dass ein Echo zu hören ist.
Ist das der einzige Unterschied? Was ist der Anwendungsfall für jeden der Befehle?
bash
directory
cd-command
pushd
dr01
quelle
quelle
cd ~-
.Antworten:
Hier spielen zwei Dinge eine Rolle. Zunächst wird das
-
alleinige Verzeichnis zu Ihrem vorherigen Verzeichnis erweitert. Dies wird imcd
Abschnitt vonman bash
(Schwerpunkt Mine) erklärt: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:Dies könnte anhand eines Beispiels verständlicher sein:
Im Allgemeinen
-
bedeutet das also "das vorherige Verzeichnis". Das ist der Grund, warum Siecd -
von alleine dorthin zurückgebracht werden, wo Sie waren.Der Hauptunterschied ist, dass
cd -
es spezifisch für dencd
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 duecho ~-
und bekommst etwas Sinnvolles. Sie können es auch in verwenden,cd ~-
aber Sie können es auch in jedem anderen Befehl verwenden. Zum Beispielcp ~-/* .
wäre das äquivalent zucp "$OLDPWD"/* .
quelle
set -x
Das Ausdrucken des erweiterten Befehls vor der Ausführung kann hilfreich sein, um den Unterschied zu veranschaulichen (oder kann unleserlich laut sein, wenn Sie den Befehl nicht Schritt für Schritt selbst ausführen).cd ~-/..
funktioniertcd -/..
nicht!~-
Unterliegt einer Tilde-Erweiterung (siehe man bash), sodasscd
der vorherige Verzeichnisname direkt angezeigt wird.-
wird von der Shell nicht erweitert,cd
sieht es direkt und verhält sich wie dokumentiert:quelle
TL; DR:
cd -
ist eingebaut incd
,~-
ist eine spätere Erweiterung von~[name]
, nicht spezifisch fürcd
.POSIX.1-2008 Shell & Utilities definiert
cd -
als Sonderfall, der für den Befehl spezifisch ist :cd
Die
~-
Erweiterung wird erweitert,$OLDPWD
bevor ein Befehl ausgeführt wird, und kann nicht nur als Argument für einen Befehl übergeben werdencd
. Es ist eine spätere Erweiterung in ksh und bash .Der oben erwähnte POSIX.1-2008 Shell & Utilities-Standard enthält auch eine ausführliche Erläuterung der Tilde-Erweiterung . Die Formulierung ist sehr spezifisch für ermöglichen
~-
als nicht definiertes Verhalten im Rahmen der Norm, wo~[name]
sich bezieht ,$HOME
wenn[name]
die leere Zeichenkette ist , oder das Home - Verzeichnis des Benutzers ,name
wennname
ein gültiger Benutzername ist.quelle