Como as variáveis podem usar “~” para o cd'ing?

13

Como posso usar uma variável - $BASE no 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 
    
por Michael Durrant 23.11.2014 / 05:26

2 respostas

25

Em cd ~/z/ , você está usando Expansão de til para expandir ~ para seu diretório pessoal. Em BASE="~/z" , você não está porque você citou o caractere ~ , por isso 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.

    
por 23.11.2014 / 05:30
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 $HOME em vez de ~ , ou seja, 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 do til.

    
por 23.11.2014 / 15:52