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-15hvis 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 FooIndtastecho !$ JarIndtast Op Indtast ; og -
echo FooIndtastecho $_ JarIndtast 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.
echonoget, 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.