Widzę to w skrypcie powłoki.
variable=${@:2} 
Co to robi?
Komentarze
Odpowiedź
 To jest pokazując zawartość specjalnej zmiennej $@ w Bash. Zawiera ona wszystkie argumenty wiersza poleceń, a to polecenie pobiera wszystkie argumenty z drugiego i przechowuje je w zmiennej , variable. 
Przykład
Oto przykładowy skrypt.
#!/bin/bash echo ${@:2} variable=${@:3} echo $variable 
Przykład uruchomienia:
./ex.bash 1 2 3 4 5 2 3 4 5 3 4 5 
Referencje
Komentarze
-  Zwróć uwagę, że pokazana technika łączy podane argumenty w jeden strunowy. Jeśli chcesz zachować je jako osobne argumenty, użyj tablicy: 
vars=( "${@:2}" ) - @glennjackman – dziękujemy za wskazanie.
 -  Również zwróć uwagę na użycie nawiasów klamrowych. Powinieneś zawsze używać nawiasów klamrowych, ale Bash pozwala na ich pominięcie, gdy kontekst jest jednoznaczny. Dlatego 
$@i${@}są identyczne, chociaż to drugie jest " bardziej poprawne " składnia. Musisz użyć nawiasów z${@:2}, ponieważ$@:2jest niejednoznaczne i dlatego zostanie zinterpretowane jako${@}:2, a to nie to samo. 
Odpowiedź
 To „sa ksh funkcję można również znaleźć w bash i ostatnich wersjach zsh. 
 W ksh i bash, możesz uzyskać dostęp do kilku elementów tablicy, używając składni ${array[@]:first:length}, która rozwija się do maksymalnie length (lub wszystkich, jeśli pominięto length) elementów array tablica (na liście elementów tablicy posortowanych numerycznie według indeksów), zaczynając od pierwszej z indeksem większym lub równym first. W kontekście skalarnym (jak tutaj w przypisanie do zmiennej skalarnej) lista elementów jest połączona spacją ch znaki zawierające bash i ksh93 oraz pierwszy znak $IFS (lub nic, jeśli $IFS jest puste lub spacja, jeśli nie jest ustawione) z zsh. 
Na przykład:
$ a[23]=a a[5]=b a[235]=c a[45]=d $ x=${a[@]:12:2}; printf "<%s>\n" "$x" <a d> 
 $@ to przypadek specjalny. $@ to tablica parametrów pozycyjnych ($1, $2 …). Ale gdy jest używany z :, $0 jest również uwzględniany. Zatem ${@:1} to to samo co $@, a nie ${@:0} jak w przypadku innych tablic. 
 W zsh jest nieco inaczej. zsh dodał ksh ostatnio dla zachowania zgodności, ale ma własną składnię do wybierania zakresów elementów. 
 W przeciwieństwie do ksh i bash, zsh tablice są zmiennymi innego typu niż zmienne skalarne, nie są rzadkie (zsh ma tablice asocjacyjne jako inny typ zmiennej) i rozpocznij pod indeksem 1 zamiast 0. 
 Dla zsh, uzyskujesz dostęp do zakresów elementów tablicy za pomocą $a[first,last] (gdzie last może być również ujemne, aby liczyć wstecz od końca). 
 W zsh, 
a[23]=a a[5]=b a[235]=c a[45]=d 
 tworzy tablicę zawierającą 235 elementów, z których większość jest pusta. $a[12,50] rozwinie się do elementów od 12 do 50, a ${a[@]:12:2} rozwinie się tylko do (pustego) $a[12] i $a[13]. Jako szczególny przypadek i ponownie dla przenośności z ksh93 i bash, zsh akceptuje również 0 pierwszy element dla $@ i traktuje go jako $0. 
 Możesz więc używać ${a[@]:x:n} i ${@:x:n} przenośnie we wszystkich 3 powłokach, ale tylko dla nierzadkich tablic i zwróć uwagę na wartość IFS.
Komentarze
- Dziękujemy za wyjaśnienie składni indeksowania tablic
 
var="my_value"; echo var="${var[@]:2}"; echo "$var"Widzisz różnicę?