POSIX define isso ...
-
... se
cdnão recebeu nenhum argumento, ele usará o valor de$HOMEse a variável estiver configurada e não fará nada de outra forma (embora também diga que os resultados não são especificados). -cd -
... se um argumento for
~ou começar com~/, o til será expandido para o valor de$HOMEse a variável for definida; os resultados não são especificados de outra forma. -tilde expansion
Então, se $HOME estiver definido, então todos os três comandos serão equivalentes. (barras extras após nomes de diretório não fazem sentido).
No entanto, se $HOME não for definido, os resultados de ~ -expansion e cd serão não especificados :
-
Em bash , AT & T ksh , e Heirloom sh ,% comum
cdfalhará com "nenhum diretório inicial ". -
Em csh , zsh , traço e MirBSD mksh , simples
cdserá não faça nada. -
Em tcsh ,% comum
cdprocurará o diretório inicial usandogetpwuid().
Quanto à expansão ~ ...
-
bash e tcsh expandirão
~para o diretório inicial emgetpwnam(). -
AT & T ksh expandirá
~para seu nome de usuário (?!). -
Em csh e zsh ,
~será expandido para uma string vazia. (cd ~, portanto, não fará nada, comocd, nesses shells.) -
No traço e no MirBSD mksh , o
~permanecerá literal~. (O uso decd ~tentará mudar para um diretório chamado tal). -
A herança sh nunca expande
~mesmo se$HOMEestiver definido - provavelmente é anterior à convenção.
Destes, apenas csh e zsh aderem à definição POSIX de expandir ~ para o valor de $HOME , mesmo que esteja vazio.
(O shell fish sempre define $HOME de getpwnam() na inicialização se a variável estiver vazia e se recusa a modificá-la posteriormente.)