Hvad betyder! $?

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

  • Det ' er generelt sikkert at prøve at echo noget, hvis du ' ikke er sikker på, hvad det ' gør.
  • @Shadur, ikke altid. echo $(rm -rf /)
  • @cjm Medmindre du ' er på et rigtig gammelt system, er du ' skal bruge --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.
  • @WChargin Vær meget forsigtig med at antage, at " virkelig gammel " og " ikke Linux / ikke bruger GNU-coreutils " er det samme; de er ' t.

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 Indtast echo !$ Jar Indtast Op Indtast ; og

  • echo Foo Indtast echo $_ 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 til M-..
  • @ 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.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *