Saya melihat ini dalam skrip shell.
variable=${@:2}
Apa yang sedang dilakukannya?
bash
shell-script
ksh
Lenin Raj Rajasekaran
sumber
sumber
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 variabelvariable
,.Contoh
Berikut ini skrip exampe.
Contoh dijalankan:
Referensi
sumber
vars=( "${@:2}" )
$@
dan${@}
identik, meskipun yang terakhir adalah sintaks "lebih benar". Anda harus menggunakan tanda kurung${@:2}
, karena$@:2
bersifat ambigu dan karenanya akan ditafsirkan sebagai${@}:2
, yang bukan hal yang sama.Itu
ksh
fitur yang juga ditemukan dibash
dan versi terbaru darizsh
.Di
ksh
danbash
, Anda dapat mengakses beberapa elemen array dengan menggunakan${array[@]:first:length}
sintaks, yang meluas hinggalength
(atau semua jikalength
dihilangkan) elemenarray
array (dalam daftar elemen array yang diurutkan secara numerik pada indeks), dimulai dengan yang pertama dengan indeks lebih besar atau sama denganfirst
. Ketika dalam konteks skalar (seperti di sini dalam penugasan ke variabel skalar) daftar elemen digabungkan dengan karakter spasi denganbash
danksh93
dan dengan karakter pertama dari$IFS
(atau tidak ada apa-apa jika$IFS
kosong atau spasi jika tidak disetel) denganzsh
.Contohnya:
$@
adalah kasus khusus.$@
adalah larik parameter posisi ($1
,$2
...). Namun saat digunakan bersama:
,$0
juga disertakan. Begitu${@:1}
juga dengan$@
, tidak${@:0}
seperti untuk array lainnya.Dalam
zsh
, ini sedikit berbeda.zsh
menambahkanksh
sintaks hanya baru-baru ini untuk kompatibilitas tetapi memiliki sintaks sendiri untuk memilih rentang elemen.Bertentangan dengan
ksh
danbash
,zsh
array adalah tipe variabel yang berbeda dari variabel skalar, tidak jarang (zsh
memiliki 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 manalast
juga bisa negatif untuk menghitung mundur dari akhir).Di
zsh
,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 denganksh93
danbash
,zsh
juga menerima0
elemen 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.sumber