Seuraan opetusohjelmaa ja siinä mainitaan tämän komennon suorittaminen:
sudo chmod 700 !$
En tiedä !$. Mitä se tarkoittaa?
Kommentit
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-15jos 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 FooEnterecho !$ JarEnter Ylös Enter ; ja -
echo FooEnterecho $_ JarKirjoita 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ä sidottuM-.. - @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ä.
echojotain, jos ' et ole varma, mitä se ' ll tekee.echo $(rm -rf /)--no-preserve-root-vaihtoehdon siellä, ja jos näet sanat " ei säilytä " ohjelmassa sinun on parasta miettiä todella tarkasti, mitä se tekee.