As diretrizes de sintaxe do utilitário POSIX (especificamente nº 13) especificam que, para utilitários que esperam ler um nome de arquivo, -significa entrada padrão e para utilitários que esperam que um nome de arquivo seja gravado, -significa saída padrão. Por exemplo, cat somefile -copia o conteúdo somefilepara sua saída padrão, seguido pelo que lê em sua entrada padrão.
Esta diretriz não se aplica ao cdcomando, pois não lê ou grava em um arquivo. cdfaz algo diferente: o argumento -significa "o diretório anterior". O comando cd -é equivalente a cd "$OLDPWD" && pwd. Esse comportamento é específico ao cdcomando e a comandos diretamente inspirados, como pushd.
Observe que -é um operando, não uma opção. Somente argumentos que começam com -e não são apenas -ou --são opções. A principal implicação de ser um operando é que --não afeta seu significado especial. Por exemplo, cd -- -Pmuda para um subdiretório chamado -P, mas cd -- -é o mesmo que cd -, não muda para um diretório chamado -. Da mesma forma, cat -- -não lê de um arquivo chamado, -mas de entrada padrão.
cdé um comando interno, não externo (nem teria como sequer funcionar como um).cd -é, portanto, um recurso no nível do shell.