Un segno meno (aka dash) da solo non è un'opzione, ma un operando (ovvero un argomento che non è un'opzione). Per questo --
motivo , metterlo davanti non ha alcun effetto. Il trattino è un operando in cd -
e ancora un operando in cd -- -
. Come altre utility standard, cd
considera un operando come un operando indipendentemente dal fatto che sia presente --
prima.
Il cd
comando assegna un significato speciale all'operando -
. Qualcos'altro è una directory in cui passare. cd -- -a
passa alla directory chiamata -a
, perché -a
non è speciale come operando e --
impedisce cd
di trattarla come un'opzione. Questo non funziona da -
solo, che non è un'opzione.
Mettere le virgolette in giro -
non aiuta, dal momento che alla fine passerebbe -
comunque l'operando .
L'unica soluzione è quindi quella di trovare un altro modo di esprimere la stessa idea, ovvero un altro nome per la stessa directory. Fortunatamente, ce n'è uno semplice: se aggiungi ./
prima un nome file relativo, significa sempre lo stesso file. La ./
fa la differenza, che è irrilevante nel nostro caso: CDPATH
non viene consultato quando il nome della directory inizia con /
, ./
o ../
. Così:
cd ./-
Un altro modo, poiché -
è una directory, è quello di aggiungere un /
dopo. L'aggiunta di /
a alla fine del nome di un file garantisce che il file sia trattato come una directory (in particolare, il comando opererà sulla directory stessa e non sul link simbolico se il file è un link simbolico a una directory), ma in caso contrario nessuna differenza. Così:
cd -- -/
La scrittura -/
è suggerita dal codice di completamento, a proposito, ma in bash in realtà funziona solo con --
prima, bash non ha un caso speciale per cd -/
(zsh lo fa).