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, cdconsidera un operando come un operando indipendentemente dal fatto che sia presente --prima.
Il cdcomando assegna un significato speciale all'operando -. Qualcos'altro è una directory in cui passare. cd -- -apassa alla directory chiamata -a, perché -anon è speciale come operando e --impedisce cddi 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: CDPATHnon 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).