Jeg ser dette i et shell-script.
variable=${@:2} Hvad laver det?
Kommentarer
Svar
 Det “s viser indholdet af den specielle variabel $@ i Bash. Den indeholder alle kommandolinjeargumenterne, og denne kommando tager alle argumenter fra den anden og lagrer dem i en variabel , variable. 
Eksempel
Her er et eksempel på et script.
#!/bin/bash echo ${@:2} variable=${@:3} echo $variable Eksempelkørsel:
./ex.bash 1 2 3 4 5 2 3 4 5 3 4 5 Referencer
Kommentarer
-  Bemærk, at den viste teknik blander de givne argumenter i en enkelt snor. Hvis du har brug for at beholde dem som separate argumenter, skal du bruge et array: vars=( "${@:2}" )
- @glennjackman – tak for at påpege det.
-  Også bemærk brugen af de krøllede parenteser. Du skal altid bruge krøllede parenteser, men Bash giver dig mulighed for at udelade dem, når konteksten er entydig. Derfor er $@og${@}identiske, skønt sidstnævnte er " mere korrekt " syntaks. Du skal bruge parenteserne med${@:2}, fordi$@:2er tvetydig og vil derfor blive fortolket som${@}:2, hvilket ikke er den samme ting.
Svar
 At “sa ksh -funktion findes også i bash og nyere versioner af zsh. 
 I ksh og bash, kan du få adgang til flere elementer i et array ved hjælp af ${array[@]:first:length} syntaksen, som udvides til op til length (eller alle hvis length udelades) elementer i array array (i listen over elementerne i arrayet sorteret numerisk efter indekserne) startende med den første med indeks større eller lig med first. Når det er i skalær sammenhæng (som her i en tildeling til en skalarvariabel) listen over elementer er forbundet med mellemrum ch tegn med bash og ksh93 og med det første tegn i $IFS (eller intet hvis $IFS er tomt eller mellemrum, hvis det ikke er indstillet) 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 specielt tilfælde. $@ er en række positionsparametre ($1, $2 …). Men når det bruges med :, er $0 også inkluderet. Så ${@:1} er det samme som $@, ikke ${@:0} som for andre arrays. 
 I zsh er det lidt anderledes. zsh tilføjede ksh syntaks kun for nylig for kompatibilitet, men har sin egen syntaks til valg af elementområder. 
 I modsætning til ksh og bash, zsh arrays er en anden variabeltype fra skalarvariabler, er ikke sparsomme (zsh har associerende arrays som en anden variabeltype) og start ved indeks 1 i stedet for 0. 
 For zsh får du adgang til array-elementintervaller med $a[first,last] (hvor last kan også være negativt at tælle baglæns fra slutningen). 
 I zsh, 
a[23]=a a[5]=b a[235]=c a[45]=d  opretter en matrix med 235 elementer, hvoraf de fleste er tomme. $a[12,50] ville udvides til elementerne 12 til 50, og ${a[@]:12:2} ville kun udvides til (tom) $a[12] og $a[13] -elementer. Som et specielt tilfælde og igen til bærbarhed med ksh93 og bash, accepterer zsh også et 0 første element til $@ og behandler det som $0. 
 Så du kan bruge ${a[@]:x:n} og ${@:x:n} på alle 3 skaller, men kun til ikke-sparsomme arrays, og vær opmærksom på værdien af IFS.
Kommentarer
- Tak fordi du forklarede syntaks for matrixindeksering
var="my_value"; echo var="${var[@]:2}"; echo "$var"Ser du forskellen?