Um sinal de menos (aka traço) sozinho não é uma opção, mas um operando (isto é, um argumento que não é uma opção). Por isso, colocar --antes não tem efeito. O traço é um operando cd -e ainda um operando cd -- -. Como outros utilitários padrão, cdtrata um operando como um operando, independentemente de existir --antes dele.
O cdcomando atribui um significado especial ao operando -. Qualquer outra coisa é um diretório para o qual mudar. cd -- -amuda para o diretório chamado -a, porque -anão é especial como um operando e --evita cdtratá-lo como uma opção. Isso não funciona -sozinho, o que não é uma opção.
Colocar aspas -não ajudará, pois isso acabaria passando o operando de -qualquer maneira.
Seu único recurso é, portanto, encontrar outra maneira de expressar a mesma idéia, ou seja, outro nome para o mesmo diretório. Felizmente, é fácil: se você adicionar ./antes de um nome de arquivo relativo, ainda significa o mesmo arquivo. O ./faz uma diferença que é irrelevante no nosso caso: CDPATHnão é consultada quando o nome do diretório começa com /, ./ou ../. Portanto:
cd ./-
Outra maneira, como -é um diretório, é adicionar um /depois dele. A adição de um /no final de um nome de arquivo garante que o arquivo seja tratado como um diretório (em particular, o comando funcionará no próprio diretório e não no link simbólico se o arquivo for um link simbólico para um diretório), mas, caso contrário, fará com que sem diferença Portanto:
cd -- -/
A escrita -/é sugerida pelo código de conclusão, a propósito, mas no bash, na verdade, só funciona --antes, o bash não tem um caso especial para cd -/(o zsh faz).