POSIX define isso ...
-
... se
cd
não recebeu nenhum argumento, ele usará o valor de$HOME
se 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$HOME
se 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
cd
falhará com "nenhum diretório inicial ". -
Em csh , zsh , traço e MirBSD mksh , simples
cd
será não faça nada. -
Em tcsh ,% comum
cd
procurará 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$HOME
estiver 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.)