Comment les variables peuvent-elles utiliser «~» pour cd'ing?

13

Comment puis-je utiliser une variable - $BASEdans mon cd. J'ai essayé ce qui suit mais j'obtiens une erreur

$ 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
la source

Réponses:

25

Dans cd ~/z/vous utilisez l' extension Tilde pour développer ~votre répertoire personnel. Dans BASE="~/z", vous n'êtes pas parce que vous avez cité le ~caractère, il n'est donc pas développé. C'est pourquoi vous obtenez un message se plaignant d'un ~répertoire inexistant . La solution est de ne pas le citer, c'est- BASE=~/zà- dire afin de laisser se développer l'expansion.

jw013
la source
11

@ jw013 a donné une explication et une solution valides.

Mais il peut y avoir des cas où vous voulez citer les chemins, par exemple quand ils contiennent plusieurs espaces ou symboles spéciaux. Dans ce cas, vous devez utiliser à la $HOMEplace de ~, c'est-à-dire que votre BASE="~/z"volonté deviendra BASE="$HOME/z"et fonctionnera correctement, car la substitution de paramètres est interprétée entre guillemets, contrairement à l'expansion tilde.

Ruslan
la source
5
C'est une façon de le faire, mais ce n'est pas nécessaire. BASE=~/"quoted name"fonctionne très bien, tant que le ~est laissé sans guillemets.
hvd
4
@hvd: vous devez également laisser la barre oblique sans guillemets. BASE=~/"quoted name"fonctionne, mais BASE=~"/quoted name"ne fonctionne pas.
Gordon Davisson
Tu as raison. Bonne prise.
2014