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 

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ę.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.