Ein Minus (auch als Bindestrich bezeichnet) allein ist keine Option, sondern ein Operand (dh ein Argument, das keine Option ist). Aus diesem Grund hat das Voranstellen --
keine Wirkung. Der Bindestrich ist ein Operand in cd -
und immer noch ein Operand in cd -- -
. cd
Behandelt einen Operanden wie andere Standarddienstprogramme als einen Operanden, unabhängig davon, ob sich --
davor ein Operand befindet .
Der cd
Befehl weist dem Operanden eine besondere Bedeutung zu -
. Alles andere ist ein Verzeichnis, in das man wechseln kann. cd -- -a
wechselt in das aufgerufene Verzeichnis -a
, da dies -a
kein spezieller Operand ist und --
verhindert cd
, dass es als Option behandelt wird. Dies funktioniert nicht -
alleine, was keine Option ist.
Das Umstellen von Anführungszeichen -
hilft nicht weiter, da dies letztendlich den Operanden -
ohnehin übergehen würde.
Sie müssen daher nur einen anderen Weg finden, um dieselbe Idee auszudrücken, dh einen anderen Namen für dasselbe Verzeichnis. Glücklicherweise gibt es eine einfache ./
Möglichkeit : Wenn Sie vor einem relativen Dateinamen einen Dateinamen hinzufügen , bedeutet dies immer noch, dasselbe File. Das ./
macht einen Unterschied, der in unserem Fall irrelevant ist: CDPATH
Wird nicht abgefragt, wenn der Verzeichnisname mit /
, ./
oder beginnt ../
. Somit:
cd ./-
Eine andere Möglichkeit, da -
es sich um ein Verzeichnis handelt, besteht darin, ein /
dahinterstehendes hinzuzufügen . Durch /
das Hinzufügen von am Ende eines Dateinamens wird sichergestellt, dass die Datei als Verzeichnis behandelt wird (insbesondere wird der Befehl auf das Verzeichnis selbst und nicht auf den Symlink angewendet, wenn es sich bei der Datei um einen symbolischen Link zu einem Verzeichnis handelt), andernfalls jedoch ausgeführt kein Unterschied. Somit:
cd -- -/
Das Schreiben -/
wird übrigens durch den Completion-Code vorgeschlagen, aber in der Bash funktioniert es nur, --
bevor es ausgeführt wird. Die Bash hat keinen speziellen Fall für cd -/
(zsh tut es).