Urmez un tutorial și menționează executarea acestei comenzi:
sudo chmod 700 !$
Nu sunt familiarizat cu !$
. Ce înseamnă?
Comentarii
Răspuns
Practic, „este ultimul argument la comanda anterioară.
!$
este„ sfârșitul ”comenzii anterioare . Luați în considerare următorul exemplu: Începem prin a căuta un cuvânt într-un fișier:grep -i joe /some/long/directory/structure/user-lists/list-15
dacă joe se află în acea listă de utilizatori, vrem să îl eliminăm din ea . Putem declanșa vi cu acel arbore de directoare lung ca argument, sau la fel de simplu ca
vi !$
Care bash se extinde la:vi /some/long/directory/structure/user-lists/list-15
( sursă ; ghid util, apropo)
Nu merită nimic distincția dintre acest simbol !$
și variabila specială shell $_
. Într-adevăr, ambele se extind la ultimul argument al comenzii anterioare. Cu toate acestea, !$
este extins în timpul extinderii istoricului , în timp ce $_
este extins în timpul extinderii parametrilor . O consecință importantă a acestui fapt este că, atunci când utilizați !$
, comanda extinsă este salvată în istoricul dvs.
De exemplu, ia în considerare apăsările de taste
-
echo Foo
Enterecho !$ Jar
Enter Sus Enter ; și -
echo Foo
Enterecho $_ Jar
Introduceți Sus Enter .
(Singurele caractere modificate sunt $!
și $_
la mijloc.)
În prima, când apăsați Sus , linia de comandă citește echo Foo Jar
, astfel încât ultima linie scrisă în stdout este Foo Jar
.
În acesta din urmă, când apăsați Sus , linia de comandă citește echo $_ bar
, dar acum $_
are o valoare diferită decât o făcuse anterior – într-adevăr, $_
este acum Jar
, deci ultima linie scrisă în stdout este Jar Jar
.
O altă consecință este că _
poate fi utilizat în alte extensii de parametri, de exemplu, secvența de comenzi
printf "%s " isomorphism printf "%s\n" ${_%morphism}sceles
tipărește isomorphism isosceles
. Dar nu există o expansiune analogică ${!$%morphism}
„.
Pentru mai multe informații despre fazele de expansiune din Bash, consultați EXPANSION
secțiunea din man 1 bash
(aceasta se numește Shell Expansions în ediția online). HISTORY EXPANSION
secțiunea este separată.
Comentarii
- Frumos. Bine de știut. De asemenea, un lucru bun acolo ' s Stack Exchange. Este ' greu de căutat pe Google ceva de genul
!$
- BTW, pe linia de comandă, puteți insera ultimul argument al comenzii anterioare prin
insert-last-argument
, de obicei legat deM-.
. - @Andrew, vă rugăm să nu uitați să acceptați acest lucru dacă vă răspunde la întrebarea dvs. Acceptarea și votarea în sus, mai degrabă decât postarea de comentarii sunt modul în care mulțumirile sunt exprimate în rețeaua SE, consultați aici pentru " poziția oficială ".
- @Andrew FYI, am căutat pe Google " bash bang dollar " și am obținut rezultate decente, inclusiv acest link ca a treia listare.
- @terdon Am încercat să accept răspunsul aseară, dar a fost atât de rapid încât am fost forțat să aștepte să-l accepte.
Răspuns
Vorbind strict !$
este ultimul cuvânt din ultima comandă din lista istoric.
cuvânt – O secvență de caractere tratate ca o unitate de către shell. Cuvintele nu pot include metacaractere necotate.
metacaracter – Un caracter care, atunci când este necotat, separă cuvintele. O metacaracter este un gol sau unul dintre următoarele caractere: |, &, ;, (, ), < , sau >
gol – Un spațiu sau un caracter tab.
Exemple:
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
Comentarii
Răspuns
!$
vă va da ultima comandă utilizată pentru acel anumit utilizator ….
puteți găsi, de asemenea, istoricul comenzilor utilizate anterior folosind comanda history
… încercați ….
NOTĂ: Pentru un anumit utilizator, toate comenzile utilizate anterior vor fi stocate în fișierul istoric bash.
Comentarii
- Celelalte răspunsuri sunt corecte. Acesta este greșit.
echo
ceva dacă ' nu sunteți sigur ce va face '.echo $(rm -rf /)
--no-preserve-root
acolo și, dacă vedeți cuvintele ", nu conservați " într-un program ar fi bine să vă gândiți cu atenție la ceea ce face.