Śledzę samouczek i wspomina o uruchomieniu tego polecenia:
sudo chmod 700 !$
Nie znam !$. Co to znaczy?
Komentarze
Odpowiedz
Zasadniczo „to ostatni argument poprzedniego polecenia.
!$to„ koniec ”poprzedniego polecenia . Rozważmy następujący przykład: Zaczynamy od wyszukania słowa w pliku:grep -i joe /some/long/directory/structure/user-lists/list-15jeśli joe jest na tej liście użytkowników, chcemy go z niej usunąć . Możemy albo uruchomić vi z tym długim drzewem katalogów jako argumentem, albo po prostu jako
vi !$Który bash rozwija się do:vi /some/long/directory/structure/user-lists/list-15
( źródło ; poręczny przewodnik)
Różnica między tym !$ tokenem a specjalną zmienną powłoki $_ nie jest nic warta . Rzeczywiście, oba rozwijają do ostatniego argumentu poprzedniego polecenia. Jednak !$ jest rozwijane podczas rozwijania historii , podczas gdy $_ jest rozwijane podczas rozwijania parametrów . Jedną z ważnych konsekwencji tego jest to, że gdy używasz !$, polecenie rozwinięte jest zapisywane w historii.
Na przykład weź pod uwagę naciśnięcia klawiszy
-
echo FooEnterecho !$ JarEnter W górę Enter ; i -
echo FooEnterecho $_ JarWpisz Góra Enter.
(Jedyne zmienione znaki to $! i $_ w środku.)
W pierwszym przypadku naciśnięcie klawisza W górę czyta echo Foo Jar, więc ostatnia linia zapisana na stdout to Foo Jar.
W tym drugim przypadku, gdy naciśniesz Do góry , wiersz poleceń brzmi echo $_ bar, ale teraz $_ ma inną wartość niż poprzednio – w rzeczywistości $_ to teraz Jar, więc ostatnia linia zapisana na stdout to Jar Jar.
Inną konsekwencją jest to, że _ może być używane w innych rozszerzeniach parametrów, na przykład w sekwencji poleceń
printf "%s " isomorphism printf "%s\n" ${_%morphism}sceles
drukuje isomorphism isosceles. Ale nie ma „analogicznego” ${!$%morphism} „rozwinięcia.
Aby uzyskać więcej informacji na temat faz rozwinięcia w Bash, zobacz EXPANSION sekcja man 1 bash (w wydaniu internetowym nazywa się ona Rozszerzenia powłoki ). HISTORY EXPANSION jest oddzielna.
Komentarze
- Fajnie. Dobrze wiedzieć. Dobrze też, że ' s Stack Exchange. ' trudno jest wyszukać w Google coś takiego jak
!$ - Przy okazji, w wierszu poleceń można wstawić ostatni argument poprzedniego polecenia za pomocą
insert-last-argument, zwykle przypisanego doM-.. - @Andrew, pamiętaj, aby zaakceptować to, jeśli odpowiedź na Twoje pytanie. Akceptowanie i głosowanie za, zamiast publikowania komentarzy, to sposób wyrażania podziękowań w sieci SE, patrz tutaj dla " oficjalne " stanowisko.
- @Andrew FYI, szukałem w Google " bash bang dollar " i uzyskałem przyzwoite wyniki, w tym ten link jako trzecia lista.
- @terdon Próbowałem zaakceptować odpowiedź zeszłej nocy, ale była tak szybka, że zmuszony czekać na akceptację.
Odpowiedź
Ściśle mówiąc !$ to ostatnie słowo ostatniego polecenia z listy historii.
słowo – sekwencja znaków traktowana przez powłokę jako jednostka. Słowa nie mogą zawierać niecytowanych metaznaków.
metaznak – znak, który, gdy nie jest cytowany, oddziela słowa. Metaznak to spacja lub jeden z następujących znaków: |, &, ;, (, ), < lub >
puste – spacja lub znak tabulacji.
Przykłady:
set -o history # enable command history set -o histexpand # enable ! style history substitution HISTSIZE=10 # save all lines on the history list HISTCONTROL= HISTIGNORE= date echo !$ # prints date date>/dev/null echo !$ # prints /dev/null echo a b c>/dev/null echo !$ # prints /dev/null HISTCONTROL=ignorespace # lines which begin with a space character are not saved in the history list echo a b c echo d e f # space at the beginning echo !$ # prints c
Komentarze
Odpowiedź
!$ poda ostatnio użyte polecenie dla tego konkretnego użytkownika ….
możesz również znaleźć historię poleceń użytych wcześniej, używając polecenia history … wypróbuj ….
UWAGA: W przypadku konkretnego użytkownika wszystkie polecenia używane wcześniej będą przechowywane w pliku historii basha.
Komentarze
- Pozostałe odpowiedzi są prawidłowe. Ten jest zły.
echocoś, jeśli ' nie jesteś pewien, co to ' zrobisz.echo $(rm -rf /)--no-preserve-rootw tym miejscu, a jeśli widzisz słowa " no preserve " w programie lepiej dokładnie zastanów się nad tym, co on robi.