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 somefile
para sua saída padrão, seguido pelo que lê em sua entrada padrão.
Esta diretriz não se aplica ao cd
comando, pois não lê ou grava em um arquivo. cd
faz algo diferente: o argumento -
significa "o diretório anterior". O comando cd -
é equivalente a cd "$OLDPWD" && pwd
. Esse comportamento é específico ao cd
comando 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 -- -P
muda 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.