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 

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.


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.