~
é um nome especial expandido pelo shell, .
e ..
são nomes de diretório reais, portanto, nenhuma expansão é feita pelo shell lá.
Como ~
, .
e ..
são diretórios especiais, por que eles são tratados de maneira diferente no exemplo a seguir?
$ echo ~
/home/tim
$ echo ..
..
$ echo .
.
~
é expandido para o diretório, mas os outros dois não são. ~
não é. ~
é um nome especial expandido pelo shell, .
e ..
são nomes de diretório reais, portanto, nenhuma expansão é feita pelo shell lá.