Jeg ser dette i et skallskript.
variable=${@:2} 
Hva gjør det?
Kommentarer
Svar
 It «s viser innholdet til den spesielle variabelen $@, i Bash. Den inneholder alle kommandolinjeargumentene, og denne kommandoen tar alle argumentene fra den andre og lagrer dem i en variabel , variable. 
Eksempel
Her er et eksempel på skript.
#!/bin/bash echo ${@:2} variable=${@:3} echo $variable 
Eksempelkjøring:
./ex.bash 1 2 3 4 5 2 3 4 5 3 4 5 
Referanser
Kommentarer
-  Legg merke til at teknikken som vises blander de gitte argumentene til en enkelt streng. Hvis du trenger å beholde dem som separate argumenter, kan du bruke en matrise: 
vars=( "${@:2}" ) - @glennjackman – takk for at du påpekte det.
 -  Også legg merke til bruken av krøllete parenteser. Du skal alltid bruke krøllete parenteser, men Bash lar deg utelate dem når konteksten er entydig. Derfor er 
$@og${@}identiske, selv om sistnevnte er " mer riktig " syntaks. Du må bruke parentesene med${@:2}, fordi$@:2er tvetydig og vil derfor tolkes som${@}:2, som ikke er det samme. 
Svar
 At «sa ksh -funksjonen finnes også i bash og nyere versjoner av zsh. 
 I ksh og bash, kan du få tilgang til flere elementer i en matrise ved å bruke ${array[@]:first:length} syntaksen, som utvides til opptil length (eller alt hvis length utelates) elementer i array matrise (i listen over elementene i matrisen sortert numerisk på indeksene), og begynner med den første med indeks større eller lik first. Når du er i skalær sammenheng (som her i en tilordning til en skalarvariabel) listen over elementene er knyttet til mellomrom ch tegn med bash og ksh93 og med første tegn i $IFS (eller ingenting hvis $IFS er tomt eller mellomrom hvis det ikke er satt av) med zsh. 
For eksempel:
$ a[23]=a a[5]=b a[235]=c a[45]=d $ x=${a[@]:12:2}; printf "<%s>\n" "$x" <a d> 
 $@ er et spesielt tilfelle. $@ er matrisen med posisjonsparametere ($1, $2 …). Men når det brukes med :, er $0 også inkludert. Så ${@:1} er det samme som $@, ikke ${@:0} som for andre matriser. 
 I zsh er det litt annerledes. zsh la til ksh syntaks bare nylig for kompatibilitet, men har sin egen syntaks for valg av elementer. 
 I motsetning til ksh og bash, zsh matriser er en annen variabel type enn skalarvariabler, er ikke sparsomme (zsh har assosiative matriser som en annen variabel type) og start ved indeks 1 i stedet for 0. 
 For zsh får du tilgang til arrayelementområder med $a[first,last] (der last kan også være negativt å telle bakover fra slutten). 
 I zsh, 
a[23]=a a[5]=b a[235]=c a[45]=d 
 oppretter en matrise med 235 elementer, de fleste er tomme. $a[12,50] utvides til elementene 12 til 50, og ${a[@]:12:2} vil bare utvides til (tom) $a[12] og $a[13] elementer. Som et spesielt tilfelle, og igjen for bærbarhet med ksh93 og bash, godtar zsh et 0 første element for $@ og behandler det som $0. 
 Så, du kan bruke ${a[@]:x:n} og ${@:x:n} bærbart på tvers av alle 3 skjellene, men bare for ikke-sparsomme matriser, og ta hensyn til verdien av IFS.
Kommentarer
- Takk for at du forklarer syntaksen for matriseindeksering
 
var="my_value"; echo var="${var[@]:2}"; echo "$var"Ser du forskjellen?