Como @karel observou em sua resposta, ~ é um caractere especial e expandido por Bash no diretório inicial do usuário atual. Consulte o manual do Bash sobre "Expansão do til" ou pesquise o título "Tilde Expansion" na página man ( man bash ).
Qualquer tipo de cotação em torno do ~ impede essa expansão do til.
Para responder à sua pergunta sobre como você ainda pode usá-lo para cd em um diretório com espaços em seu nome, há algumas alternativas:
-
Omitir aspas e escapar dos espaços com barras invertidas:
cd ~/foo/spaces\ are\ cool/bar -
Cite o resto do caminho, mas omita-o em torno do til e da primeira barra:
cd ~/"foo/spaces are cool/bar"Como você pode ver, você pode concatenar strings citadas e não-citadas no Bash simplesmente escrevendo-as uma ao lado da outra sem espaços entre elas.
-
Use a variável de ambiente
$HOMEem vez do til, que ainda é expandido dentro de "aspas duplas" (mas não de 'aspas simples'):cd "$HOME/foo/spaces are cool/bar"