Näen tämän shell-komentosarjassa.
variable=${@:2}
Mitä se tekee?
Kommentit
Vastaa
Se ”s näyttää erityisen muuttujan $@ sisällön Bashissa. Se sisältää kaikki komentoriviargumentit, ja tämä komento vie kaikki toisen argumentit päälle ja tallentaa ne muuttujaan , variable.
Esimerkki
Tässä on exampe-komentosarja.
#!/bin/bash echo ${@:2} variable=${@:3} echo $variable
Esimerkkiajo:
./ex.bash 1 2 3 4 5 2 3 4 5 3 4 5
viitteet
Kommentit
- Huomaa, että esitetty tekniikka sekoittaa annetut argumentit yhdeksi merkkijono. Jos haluat pitää ne erillisinä argumentteina, käytä taulukkoa:
vars=( "${@:2}" ) - @glennjackman – kiitos, että osoitit sen.
- myös huomaa kiharoiden sulkujen käyttö. Sinun on tarkoitus käyttää aina kiharaisia sulkeita, mutta Bash antaa sinun jättää ne pois, kun asiayhteys on yksiselitteinen. Siksi
$@ja${@}ovat identtisiä, vaikka jälkimmäinen onkin " oikeampi " syntakse. Sinun on käytettävä hakasulkeita${@:2}-merkillä, koska$@:2on epäselvä ja siksi se tulkitaan nimellä${@}:2, mikä ei ole sama asia.
Vastaa
Että ”sa ksh -ominaisuus löytyy myös kohdasta bash ja uusimmista versioista zsh.
Kohdassa ksh ja bash, voit käyttää useita matriisin elementtejä ${array[@]:first:length} -syntaksilla, joka laajenee enintään length (tai kaikki, jos length jätetään pois) array -elementteihin taulukko (luettelon elementtiluettelossa, joka on lajiteltu numeerisesti hakemistoihin) alkaen ensimmäisestä, jonka indeksi on suurempi tai yhtä suuri kuin first. Kun se on skalaarikontekstissa (kuten täällä osoitus skalaarimuuttujaan) elementtiluettelo liitetään välilyöntiin ch merkit, joissa on bash ja ksh93 ja $IFS -merkki (tai ei mitään, jos $IFS on tyhjä tai välilyönti, jos sitä ei ole asetettu) merkinnällä zsh.
Esimerkiksi:
$ a[23]=a a[5]=b a[235]=c a[45]=d $ x=${a[@]:12:2}; printf "<%s>\n" "$x" <a d>
$@ on erityistapaus. $@ on sijaintiparametrien joukko ($1, $2 …). Mutta kun sitä käytetään :: n kanssa, myös $0 sisältyy. Joten ${@:1} on sama kuin $@, ei ${@:0} kuten muilla matriiseilla.
Kohdassa zsh se on hieman erilainen. zsh lisäsi ksh syntaksi vasta äskettäin yhteensopivuuden takaamiseksi, mutta sillä on oma syntaksinsa elementtialueiden valitsemiseen.
Päinvastoin kuin ksh ja bash, zsh matriisit ovat erilainen muuttujatyyppi kuin skalaarimuuttujat, eivät ole harvinaisia (zsh on assosiatiiviset taulukot toisena muuttujatyyppinä) ja aloita hakemistossa 1 sijasta 0.
zsh -sovelluksessa voit käyttää taulukkoelementtialueita $a[first,last] (missä last voi olla myös negatiivinen laskettaessa taaksepäin lopusta).
Kohdassa zsh,
a[23]=a a[5]=b a[235]=c a[45]=d
luo taulukon, jossa on 235 elementtiä, joista suurin osa on tyhjiä. $a[12,50] laajenisi elementteihin 12-50 ja ${a[@]:12:2} laajenisi vain (tyhjiin) $a[12] ja $a[13] -elementit. Erikoistapauksena ja uudelleen siirrettävyyden kannalta ksh93 ja bash, hyväksyy myös zsh 0 ensimmäinen elementti ryhmälle $@ ja käsittelee sitä nimellä $0.
Joten voit käyttää ${a[@]:x:n} ja ${@:x:n} kannettavasti kaikissa kolmessa kuoressa, mutta vain ei-harvoissa taulukoissa, ja kiinnittää huomiota IFS: n arvo.
kommentit
- kiitos taulukon indeksointisyntaksin selittämisestä
var="my_value"; echo var="${var[@]:2}"; echo "$var"Näetkö eron?