Anggap saya memiliki array yang sangat besar $large_list
, adakah cara untuk menulis fungsi yang akan menggunakan array sebagai argumen? Sebagai contoh:
echo_idx_array () {
arr="$1"
idx="$2"
echo "${arr[$idx]}"
}
Apa strategi yang biasa dilakukan untuk melakukan hal seperti itu? Saya mencoba memberikan variabel $large_list
tetapi itu kosong.
Saya bersedia mengubah fungsi untuk menyesuaikannya dengan perubahan apa pun dalam daftar argumen.
Sebagai catatan, saya menggunakan ksh88, dan saya mencari jawaban yang portabel.
EDIT : Sejauh ini yang terbaik yang bisa saya lakukan adalah untuk loop melalui array dan mengirim setiap elemen sebagai argumen ke fungsi. Ini tampaknya sangat jelek dan rawan kesalahan, belum lagi pasti akan mencapai batas tertentu dengan cepat. Inilah yang saya lakukan:
foo () {
echo $*
}
cmd="foo "
while [[ $i -lt $MAX_ARR_SIZE ]]; do
cmd="$cmd ${large_list[$i]}"
((i=i+1))
done
eval $cmd
Apakah tidak ada yang lebih baik untuk dilakukan?
"${array[$@]}
. Saran Anda benar-benar berfungsi. MEA Culpa.
func "${array[@]}"
? Jika Anda hanya perlu melewati satu elemen, cukup lewat elemen - tidak perlu membuatnya lebih berbelit-belit dengan melewatkan array dan indeks.