Jeg følger en tutorial, og det nævnes at køre denne kommando:
sudo chmod 700 !$
Jeg er ikke bekendt med !$
. Hvad betyder det?
Kommentarer
Svar
Dybest set er det “er det sidste argument til den forrige kommando.
!$
er” slutningen “på den forrige kommando Overvej følgende eksempel: Vi starter med at lede efter et ord i en fil:grep -i joe /some/long/directory/structure/user-lists/list-15
hvis joe er i den brugerliste, vil vi fjerne ham fra den Vi kan enten affyre vi med det lange katalogtræ som argumentet eller så simpelt som
vi !$
Hvilken bash udvides til:vi /some/long/directory/structure/user-lists/list-15
( kilde ; praktisk vejledning, forresten)
Det er intet værd at sondre mellem dette !$
token og den specielle shellvariabel $_
. Faktisk begge udvides til det sidste argument i den forrige kommando. !$
udvides dog under historieudvidelse , mens $_
udvides under parameterudvidelse . En vigtig konsekvens af dette er, at når du bruger !$
, gemmes kommandoen udvidet i din historie.
For eksempel, overvej tastetryk
-
echo Foo
Indtastecho !$ Jar
Indtast Op Indtast ; og -
echo Foo
Indtastecho $_ Jar
Indtast Op Indtast .
(De eneste ændrede tegn er $!
og $_
i midten.)
I førstnævnte, når du trykker Op , kommandolinjen læser echo Foo Jar
, så den sidste linje skrevet til stdout er Foo Jar
.
I sidstnævnte, når du trykker på Op , kommandolinjen læser echo $_ bar
, men nu har $_
en anden værdi end tidligere – faktisk $_
er nu Jar
, så den sidste linje skrevet til stdout er Jar Jar
.
En anden konsekvens er, at _
kan bruges i andre parameterudvidelser, for eksempel kommandosekvensen
printf "%s " isomorphism printf "%s\n" ${_%morphism}sceles
udskriver isomorphism isosceles
. Men der er ingen analog ${!$%morphism}
“udvidelse.
For mere information om udvidelsesfaserne i Bash, se EXPANSION
sektion af man 1 bash
(dette kaldes Shell-udvidelser i onlineudgaven). HISTORY EXPANSION
sektionen er separat.
Kommentarer
- Dejligt. Godt at vide. Også god ting der ' s Stack Exchange. Det ' er svært at søge på Google efter noget som
!$
- BTW, på kommandolinjen kan du indsætte det sidste argument i den forrige kommando ved
insert-last-argument
, normalt bundet tilM-.
. - @ Andrew husk at acceptere dette, hvis det besvarer dit spørgsmål. Accept og opstemning snarere end at sende kommentarer er, hvordan tak udtrykkes på SE-netværket, se her til " officiel " holdning.
- @Andrew FYI, jeg søgte Google efter " bash bang dollar " og fik anstændige resultater, herunder dette link som den tredje liste.
- @terdon Jeg forsøgte at acceptere svaret i går aftes, men det var så hurtigt, at jeg var tvunget til at vente med at acceptere det.
Svar
Strengt taget !$
er det sidste ord i den sidste kommando fra historiklisten.
word – En række af tegn, der behandles som en enhed af skallen. Ord inkluderer muligvis ikke citerede metategn.
metacharacter – Et tegn, der adskiller ord, når det ikke citeres. En metakarakter er et tomt eller et af følgende tegn: |, &, ;, (, ), < eller >
blank – Et mellemrums- eller fanetegn.
Eksempler:
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
Kommentarer
Svar
!$
giver dig den sidst anvendte kommando for den pågældende bruger ….
kan du også finde historikken for kommandoer, der blev brugt tidligere ved hjælp af history
kommando … prøv det ….
BEMÆRK: For en bestemt bruger gemmes alle de tidligere anvendte kommandoer under bash-historikfilen.
Kommentarer
- De andre svar er rigtige. Denne er forkert.
echo
noget, hvis du ' ikke er sikker på, hvad det ' gør.echo $(rm -rf /)
--no-preserve-root
-muligheden derinde, og hvis du ser ordene ", skal du ikke bevare " i et program skal du bedre tænke rigtigt grundigt over, hvad det gør.