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 $@:2
bersifat ambigu dan karenanya akan ditafsirkan sebagai ${@}:2
, yang bukan hal yang sama.
Itu ksh
fitur yang juga ditemukan di bash
dan versi terbaru dari zsh
.
Di ksh
dan bash
, Anda dapat mengakses beberapa elemen array dengan menggunakan ${array[@]:first:length}
sintaks, yang meluas hingga length
(atau semua jika length
dihilangkan) elemen array
array (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 bash
dan ksh93
dan dengan karakter pertama dari $IFS
(atau tidak ada apa-apa jika $IFS
kosong 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 :
, $0
juga disertakan. Begitu ${@:1}
juga dengan $@
, tidak ${@:0}
seperti untuk array lainnya.
Dalam zsh
, ini sedikit berbeda. zsh
menambahkan ksh
sintaks hanya baru-baru ini untuk kompatibilitas tetapi memiliki sintaks sendiri untuk memilih rentang elemen.
Bertentangan dengan ksh
dan bash
, 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 mana last
juga 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 ksh93
dan bash
, zsh
juga menerima 0
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.