Como as variáveis ​​podem usar "~" para cd'ing?

13

Como posso usar uma variável - $BASEno meu cd. Eu tentei o seguinte, mas recebo um erro

$ cd ~/z/repo_1_ruby_193/
23:23:57 durrantm Castle2012 /home/durrantm/z/repo_1_ruby_193 

$ BASE="~/z"
23:24:03 durrantm Castle2012 /home/durrantm/z/repo_1_ruby_193 

$ cd $BASE/repo_1_ruby_193
-bash: cd: ~/z/repo_1_ruby_193: No such file or directory
23:24:25 durrantm Castle2012 /home/durrantm/z/repo_1_ruby_193 
Michael Durrant
fonte

Respostas:

25

Em cd ~/z/que você está usando a expansão Tilde para expandir ~em seu diretório home. Em BASE="~/z", você não é porque citou o ~personagem, portanto ele não é expandido. É por isso que você recebe uma mensagem reclamando sobre um ~diretório inexistente . A solução é não citá-lo, ou seja BASE=~/z, para permitir que a expansão ocorra.

jw013
fonte
11

@ jw013 deu uma explicação e solução válidas.

Mas pode haver alguns casos em que você deseja citar os caminhos, por exemplo, quando eles contêm vários espaços ou símbolos especiais. Nesse caso, você deve usar em $HOMEvez de ~, ou seja, o seu BASE="~/z"se tornará BASE="$HOME/z"e funcionará corretamente, porque a substituição de parâmetro é interpretada entre aspas duplas, diferente da expansão til.

Ruslan
fonte
5
Essa é uma maneira de fazer isso, mas não é necessário. BASE=~/"quoted name"funciona bem, desde que não ~seja citado.
hvd 23/11
4
@ DVD: você também precisa deixar a barra sem aspas. BASE=~/"quoted name"funciona, mas BASE=~"/quoted name"não.
Gordon Davisson
Você está certo. Boa pegada.
hvd 24/11