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 

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.


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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.