Sam minus (aka myślnik) nie jest opcją, ale operandem (tzn. Argumentem, który nie jest opcją). Z tego powodu stawianie --
przed nim nie ma żadnego efektu. Myślnik jest operandem cd -
i nadal operandem w cd -- -
. Podobnie jak inne standardowe narzędzia, cd
traktuje operand jak operand, niezależnie od tego, czy jest --
przed nim.
cd
Komenda przypisuje szczególne znaczenie dla argumentu -
. Wszystko inne to katalog, do którego można się przełączyć. cd -- -a
przechodzi do katalogu o nazwie -a
, ponieważ -a
nie jest specjalny jako operand i --
zapobiega cd
traktowaniu go jako opcji. To nie działa w -
pojedynkę, co nie jest opcją.
Umieszczanie cudzysłowów -
nie pomoże, ponieważ i tak ostatecznie przejdzie operand -
.
Dlatego jedynym wyjściem jest znalezienie innego sposobu wyrażenia tego samego pomysłu, tj. Innej nazwy dla tego samego katalogu. Na szczęście jest prosty: jeśli dodasz ./
przed względną nazwą pliku, nadal oznacza to ten sam plik. ./
Robi różnicę, która nie ma znaczenia w naszym przypadku: CDPATH
nie jest konsultowany, kiedy rozpoczyna się nazwa katalogu /
, ./
lub ../
. A zatem:
cd ./-
Innym sposobem, ponieważ -
jest katalogiem, jest dodanie /
po nim. Dodanie /
na końcu nazwy pliku gwarantuje, że plik jest traktowany jako katalog (w szczególności polecenie będzie działać na samym katalogu, a nie na dowiązaniu symbolicznym, jeśli plik jest dowiązaniem symbolicznym do katalogu), ale w inny sposób powoduje bez różnicy. A zatem:
cd -- -/
Nawiasem -/
mówiąc, pisanie jest sugerowane przez kod zakończenia, ale w bash tak naprawdę działa tylko --
przed nim, bash nie ma specjalnego przypadku cd -/
(zsh robi).