Zastanawiam się, jeśli sam cd wysyła mnie do mojego folderu domowego, a cd ~ robi to samo, to dlaczego ~ zostało dodane w pierwszej kolejności?
Czy jest to coś specyficznego dla BASH, czy zachowaliby się inaczej w innej Skorupie?
cd-command
home
Luis Alvarado
źródło
źródło
cd ~
vscd $HOME
vscd ~not-tandu
. To pytanie jest pytaniem ocd
vscd ~
.Odpowiedzi:
~
Może być stosowany dłużej niż tylko to. Każde polecenie może zyskać na skrócie do folderu domowego. Więc nie jest konieczne, jeśli chcesz cd do domu, ale co z tego~/.config
?W przeciwnym razie będziesz musiał zapisać ścieżkę główną, użyć
$HOME
var lub zrobić dwacd
s. Również do kopiowania lub przenoszenia plików:Ponieważ większość plików znajduje się w domu, zawsze dobrze jest mieć skrót.
źródło
~
jestcd ~user/download
przejście do katalogu pobierania użytkownika.Wykonywanie
cd
to w zasadzie wywoływaniecd
bez argumentów i zgodnie zcd
zachowaniem „... jeśli nie podano katalogu, wartość zmiennej powłoki HOME jest wartością domyślną”. (z podręcznika bash ). W przeciwieństwie do tego,cd ~
gdy podasz argument docd
polecenia, co się dzieje~
i powłoka wykona rozwinięcie tyldy . Jeśli chodzi o powrót do katalogu domowego użytkownika - nie ma różnicy. W obu przypadkachHOME
kwerenda środowiskowa zostanie zapytana:W rzeczywistości nie ma to również różnicy
cd $HOME
. Jednak, choćcd
zrobi to jedno, tylda może być używana do wykonywania innych rozszerzeń, takich jak~+
bieżący katalog roboczy.Jednak co ciekawe, możemy
unset HOME
się złamać,cd
ale~
nadal będziemy działać:Dlaczego ? Ponownie odpowiedz w instrukcji:
Zauważ, że rozbrojenie różni się od tworzenia pustych zmiennych
HOME=
i ma wpływ. Dokumentacja mówi konkretnie o rozbrojeniu zmiennej. Ustawienie zmiennej równej pustemu ciągowi znaków daje efekt odwrotny do tego, czego byśmy oczekiwali:Tutaj widać, że wykonanie
HOME
pustego łańcucha łamie zarówno tyldę, jak icd
zachowanie.Tylda i
$HOME
mają nieco różnicę i inny powód istnienia.$HOME
jest zmienną powłokową, która również przypadkowo jest jedną ze zmiennych środowiskowych - i jest dostępna dla wszystkich programów; w C użyłbyśenviron()
do uzyskania dostępu do tego. Natomiasttilde
jest to składnia specyficzna dla powłoki, która wykonuje interpretację tyldy, chociaż można również użyćwordexp()
funkcji do wykonania ekspansji podobnej do powłoki ( odniesienia ) również w C.Powód, dla którego
~
reprezentacjaHOME
została udzielona w tym pytaniu : Pewnego razu znak tylda dzielił ten sam klucz zHOME
terminalem Lear-Siegler ADM-3A.HOME
natomiast zmienna środowiskowa, która miała czysto symboliczne znaczenie i nie posiadała fizycznych reprezentacji.Ponadto fakt, że
HOME
jest zmienną środowiskową, pozwala ją rozbroić, ponieważ nie możemy ustawić~
czegoś innego za pomocą prostych środków.Zwróć uwagę na pusty wiersz, w którym najpierw
echo
wypisuje zmienną nieustawioną, oraz fakt, że. W przeciwieństwie do tego, nie możemy robić takich rzeczy dla tyldy:Jednak zmiana
HOME
wpływa na~
:Ponadto, ponieważ
~
działa również jako znak rozszerzenia, możemy zrobić takie rzeczy, aby wyświetlić bieżący katalog roboczy:Podczas gdy jeśli chcemy to zrobić za pomocą zmiennych środowiskowych, potrzebujemy
PWD
iHOME
pozostajemy tacy sami, lub jeśli robimy takie rzeczyecho $HOME+
- to tylko połączenie łańcuch / zmienna. Ale ponownie~+
pobiera informacje ze zmiennych środowiskowych:UWAGA : rozszerzenia
~+
i~-
działają wksh
, ale nie wdash
.Aby odpowiedzieć na niektóre z Twoich szczegółowych pytań:
Nie, to powinno być konsekwentne zachowanie.
ksh
,dash
icsh
- wszystkie zachowują się tak samo zcd
lubcd ~
.Powiedziałbym, że wygoda i powody historyczne zostały wyjaśnione w powiązanej odpowiedzi na temat tyld. W końcu stało się to czymś więcej niż tylko rozszerzaniem katalogu domowego.
źródło
Bez względu na to, czy masz kilka poziomów folderów powyżej czy poniżej
$HOME
, poleceniacd
icd ~
rób to samo i nie różnią się - odeśle cię z powrotem do katalogu HOME.JEDNAK: Gdy masz 1 lub więcej poziomów folderów powyżej HOME i chcesz BEZPOŚREDNIO przejść do podkatalogu 1 lub więcej poziomów folderów poniżej
$HOME
, tilde (~
) przydaje się, oszczędzając naciśnięcia klawiszy, gdy zastępujesz tekst potrzebny do odwołania aby$HOME
podczas wpisywaniacd
polecenia. Na przykład;źródło
~ oznacza lokalizację / home / nazwa użytkownika, więc oszczędzasz trochę czasu podczas pisania. Na przykład cd / home / nazwa użytkownika / Pobrane pliki są takie same jak cd ~ / Pobrane pliki, ale mniej pisania. Oba polecenia robią to samo, zmień katalog roboczy na tę lokalizację.
źródło
root
Katalog domowy jest zwykle na zewnątrz/home