W jaki sposób zmienne mogą używać „~” do tworzenia cd?

13

Jak mogę użyć zmiennej - $BASEna mojej płycie CD. Próbowałem następujące, ale pojawia się błąd

$ 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
źródło

Odpowiedzi:

25

W cd ~/z/używasz rozszerzenia Tilde, aby rozwinąć ~swój katalog domowy. W BASE="~/z"nie jesteś, ponieważ zacytowałeś ~postać, więc nie jest ona rozwinięta. Dlatego pojawia się komunikat, że narzeka na nieistniejący ~katalog. Rozwiązaniem jest nie cytować go, tzn. BASE=~/zAby umożliwić ekspansję.

jw013
źródło
11

@ jw013 podał prawidłowe wyjaśnienie i rozwiązanie.

Ale mogą zdarzyć się przypadki, gdy chcesz zacytować ścieżki, np. Gdy zawierają wiele spacji lub specjalnych symboli. W takim przypadku powinieneś użyć $HOMEzamiast ~, tzn. BASE="~/z"Staniesz się BASE="$HOME/z"i będzie działać poprawnie, ponieważ podstawianie parametrów jest interpretowane w podwójnych cudzysłowach, w przeciwieństwie do interpretacji tyldy.

Ruslan
źródło
5
To jeden ze sposobów, aby to zrobić, ale nie jest to konieczne. BASE=~/"quoted name"działa dobrze, o ile nie ~jest cytowany.
hvd
4
@hvd: faktycznie musisz też pozostawić ukośnik bez cudzysłowu. BASE=~/"quoted name"działa, ale BASE=~"/quoted name"nie działa.
Gordon Davisson
Masz rację. Dobry chwyt
hvd