Saya melihat ini dalam skrip shell.
variable=${@:2}
Apa yang sedang dilakukannya?
var="my_value"; echo var="${var[@]:2}"; echo "$var"Lihat perbedaannya?
Saya melihat ini dalam skrip shell.
variable=${@:2}
Apa yang sedang dilakukannya?
var="my_value"; echo var="${var[@]:2}"; echo "$var"Lihat perbedaannya?
Jawaban:
Itu menunjukkan isi dari variabel khusus $@, di Bash. Ini berisi semua argumen baris perintah, dan perintah ini mengambil semua argumen dari yang kedua dan menyimpannya dalam variabel variable,.
Berikut ini skrip exampe.
#!/bin/bash
echo ${@:2}
variable=${@:3}
echo $variable
Contoh dijalankan:
./ex.bash 1 2 3 4 5
2 3 4 5
3 4 5
vars=( "${@:2}" )
$@dan ${@}identik, meskipun yang terakhir adalah sintaks "lebih benar". Anda harus menggunakan tanda kurung ${@:2}, karena $@:2bersifat ambigu dan karenanya akan ditafsirkan sebagai ${@}:2, yang bukan hal yang sama.
Itu kshfitur yang juga ditemukan di bashdan versi terbaru dari zsh.
Di kshdan bash, Anda dapat mengakses beberapa elemen array dengan menggunakan ${array[@]:first:length}sintaks, yang meluas hingga length(atau semua jika lengthdihilangkan) elemen arrayarray (dalam daftar elemen array yang diurutkan secara numerik pada indeks), dimulai dengan yang pertama dengan indeks lebih besar atau sama dengan first. Ketika dalam konteks skalar (seperti di sini dalam penugasan ke variabel skalar) daftar elemen digabungkan dengan karakter spasi dengan bashdan ksh93dan dengan karakter pertama dari $IFS(atau tidak ada apa-apa jika $IFSkosong atau spasi jika tidak disetel) dengan zsh.
Contohnya:
$ a[23]=a a[5]=b a[235]=c a[45]=d
$ x=${a[@]:12:2}; printf '<%s>\n' "$x"
<a d>
$@adalah kasus khusus. $@adalah larik parameter posisi ( $1, $2...). Namun saat digunakan bersama :, $0juga disertakan. Begitu ${@:1}juga dengan $@, tidak ${@:0}seperti untuk array lainnya.
Dalam zsh, ini sedikit berbeda. zshmenambahkan kshsintaks hanya baru-baru ini untuk kompatibilitas tetapi memiliki sintaks sendiri untuk memilih rentang elemen.
Bertentangan dengan kshdan bash, zsharray adalah tipe variabel yang berbeda dari variabel skalar, tidak jarang ( zshmemiliki array asosiatif sebagai tipe variabel lain) dan mulai pada indeks 1 bukannya 0.
Sebab zsh, Anda mengakses rentang elemen array dengan $a[first,last](di mana lastjuga bisa negatif untuk menghitung mundur dari akhir).
Di zsh,
a[23]=a a[5]=b a[235]=c a[45]=d
menciptakan array dengan 235 elemen, sebagian besar kosong. $a[12,50]akan memperluas ke elemen 12 hingga 50, dan ${a[@]:12:2}hanya akan memperluas ke (kosong) $a[12]dan $a[13]elemen. Sebagai kasus khusus, dan sekali lagi untuk portabilitas dengan ksh93dan bash, zshjuga menerima 0elemen pertama untuk $@dan memperlakukannya sebagai $0.
Jadi, Anda dapat menggunakan ${a[@]:x:n}dan ${@:x:n}portable di ketiga shell, tetapi hanya untuk array non-sparse, dan memperhatikan nilai IFS.