Mitä! $ Tarkoittaa?

Seuraan opetusohjelmaa ja siinä mainitaan tämän komennon suorittaminen:

sudo chmod 700 !$ 

En tiedä !$. Mitä se tarkoittaa?

Kommentit

  • ' on yleensä turvallista yrittää echo jotain, jos ' et ole varma, mitä se ' ll tekee.
  • @Shadur, ei aina. echo $(rm -rf /)
  • @cjm Ellet ' ole todella vanhassa järjestelmässä, ' ll tarvitsee --no-preserve-root -vaihtoehdon siellä, ja jos näet sanat " ei säilytä " ohjelmassa sinun on parasta miettiä todella tarkasti, mitä se tekee.
  • @WChargin Ole hyvin varovainen olettaen, että " todella vanha " ja " ei Linux / ei käytä GNU-ytimiä " ovat sama asia; ne eivät ole ' t.

Vastaa

Pohjimmiltaan se ”s edellisen komennon viimeinen argumentti.

!$ on edellisen komennon” loppu ” Harkitse seuraavaa esimerkkiä: Aloitamme etsimällä sanaa tiedostosta:

grep -i joe /some/long/directory/structure/user-lists/list-15 

jos joe on kyseisessä käyttäjäluettelossa, haluamme poistaa hänet siitä Voimme joko käynnistää vi tämän pitkän hakemistopuun argumenttina tai yhtä yksinkertaisesti kuin vi !$ Mikä bash laajenee:

vi /some/long/directory/structure/user-lists/list-15 

( lähde ; muuten kätevä opas)


Tämän !$ -tunnuksen ja erityisen kuorimuuttujan $_ välillä ei ole mitään tekemistä. . Itse asiassa molemmat laajenevat edellisen komennon viimeiseen argumenttiin. !$ laajennetaan kuitenkin historian laajennuksen aikana, kun taas $_ laajennetaan parametrilaajennuksen . Yksi tärkeä seuraus tästä on, että kun käytät !$, laajennettu -komento tallennetaan historiaasi.

Esimerkiksi harkitse näppäinyhdistelmiä

  • echo Foo Enter echo !$ Jar Enter Ylös Enter ; ja

  • echo Foo Enter echo $_ Jar Kirjoita Ylös Enter.

(Ainoat muutetut merkit ovat $! ja $_ keskellä.)

Edellisessä, kun painat Ylös , komentorivi lukee echo Foo Jar, joten viimeinen stdoutille kirjoitettu rivi on Foo Jar.

Jälkimmäisessä, kun painat Ylös , komentorivi lukee echo $_ bar, mutta nyt $_ on erilainen arvo kuin aikaisemmin – todellakin, $_ on nyt Jar, joten viimeinen stdoutille kirjoitettu rivi on Jar Jar.

Toinen seuraus on, että _ voidaan käyttää muissa parametrilaajennuksissa, esimerkiksi komentosarjassa

printf "%s " isomorphism printf "%s\n" ${_%morphism}sceles 

tulostaa isomorphism isosceles. Mutta vastaavaa ${!$%morphism} ”laajennusta ei ole.

Lisätietoja Bashin laajennusvaiheista on kohdassa EXPANSION

-osio

(verkkopainoksessa tätä kutsutaan kuorilaajennuksiksi ). HISTORY EXPANSION -osio on erillinen.

Kommentit

  • Hyvää. Hyvä tietää. Lisäksi hyvä asia siellä ' s pino-vaihto. ' on vaikea etsiä Googlelta esimerkiksi !$
  • BTW, voit lisätä komentoriville edellisen komennon viimeisen argumentin kirjoittamalla insert-last-argument, yleensä sidottu M-..
  • @Andrew muista muistaa hyväksyä tämä, jos se vastaa kysymykseesi. Kiitokset ilmaistaan mieluummin hyväksynnällä ja myönteisillä kommenttien lähettämisillä SE-verkossa, katso täällä " virallinen " viritys.
  • @Andrew FYI, etsin Googlelta hakua " bash bang dollar " ja sai kunnolliset tulokset, mukaan lukien tämä linkki kolmanneksi listaksi.
  • @terdon Yritin hyväksyä vastauksen viime yönä, mutta se oli niin nopeaa, että olin pakko odottaa hyväksymistä.

Vastaa

Tarkkaan ottaen !$ on historialuettelon viimeisen komennon viimeinen sana.

sana – merkkijono, jota kuori käsittelee yhtenä yksikkönä. Sanat eivät välttämättä sisällä lainaamattomia metamerkkejä.

metakuva – merkki, joka erottamatta sanoja erottaa sanat. Metakuvake on tyhjä tai yksi seuraavista merkeistä: |, &, ;, (, ), < tai >

tyhjä – välilyönti tai sarkainmerkki.

Esimerkkejä:

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 

Kommentit

Vastaa

!$ antaa sinulle viimeksi käytetyn komennon kyseiselle käyttäjälle ….

Löydät myös aiemmin käytettyjen komentojen historian history -komennolla … kokeile sitä ….

HUOMAUTUS: Tietyn käyttäjän kaikki aiemmin käytetyt komennot tallennetaan bash-historiatiedostoon.

Kommentit

  • Muut vastaukset ovat oikeat. Tämä on väärä.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *