Polecenie Bash
cd -
drukuje poprzednio używany katalog i wprowadza do niego zmiany.
Z drugiej strony polecenie Bash
cd ~-
bezpośrednio przechodzi do poprzednio używanego katalogu, bez echa czegokolwiek.
Czy to jedyna różnica? Jaki jest przypadek użycia każdego z poleceń?
bash
directory
cd-command
pushd
dr01
źródło
źródło
cd ~-
.Odpowiedzi:
Grają tutaj dwie rzeczy. Po pierwsze,
-
sam zostaje rozszerzony do poprzedniego katalogu. Wyjaśnia tocd
sekcjaman bash
(moje podkreślenie):Tak więc prosty
cd -
przeniesie Cię z powrotem do poprzedniego katalogu i wydrukuje nazwę katalogu. Drugie polecenie jest udokumentowane w sekcji „Rozbudowa tyldy”:Można to łatwiej zrozumieć na przykładzie:
Ogólnie
-
oznacza to „poprzedni katalog”. Właśnie dlategocd -
sam przeniesie Cię z powrotem do miejsca, w którym byłeś.Główna różnica polega na tym, że
cd -
jest specyficzna dlacd
wbudowanego. Jeśli spróbujesz, poecho -
prostu wydrukuje-
.~-
Jest częścią funkcji rozprężania tyldy i zachowuje się podobnie do zmiennej. Dlatego możeszecho ~-
zdobyć coś sensownego. Możesz także użyć go w,cd ~-
ale równie dobrze możesz użyć go w dowolnym innym poleceniu. Na przykładcp ~-/* .
co byłoby równoważne zcp "$OLDPWD"/* .
źródło
set -x
aby wydrukować rozszerzone polecenie przed jego wykonaniem, przydatne może być zilustrowanie różnicy (lub może być po prostu niesłyszalnie głośne, gdy nie robisz tego samemu krok po kroku).cd ~-/..
działa,cd -/..
nie działa!~-
podlega rozszerzeniu tyldy (patrz man bash), więc to, cocd
widzi, to bezpośrednio nazwa poprzedniego katalogu.-
nie jest rozszerzany przez powłokę,cd
widzi ją bezpośrednio i zachowuje się jak udokumentowano:źródło
TL; DR:
cd -
jest wbudowanecd
,~-
jest późniejszym rozszerzeniem~[name]
, nie jest specyficzne dlacd
.POSIX.1-2008 Shell & Utilities definiuje
cd -
jako specjalny przypadek specyficzny dlacd
polecenia :~-
Rozszerzenie zostanie rozszerzona$OLDPWD
zanim polecenie zostanie wykonane i mogą być przekazywane jako argument dla każdego polecenia, nie tylkocd
. Jest to późniejsze rozszerzenie w ksh i bash .Wyżej wspomniany standard POSIX.1-2008 Shell & Utilities zawiera także szczegółowe wyjaśnienie rozszerzenia Tilde . Sformułowanie jest bardzo specyficzne, aby umożliwić
~-
zachowanie jako nieokreślone w zakresie standardu, gdzie~[name]
odnosi się do tego,$HOME
czy[name]
pusty ciąg znaków lub do katalogu domowego użytkownika,name
jeśliname
jest prawidłową nazwą użytkownika.źródło