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-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
Enterecho !$ Jar
Enter Ylös Enter ; ja -
echo Foo
Enterecho $_ 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ä 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ä.
echo
jotain, 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.