Hãy xem xét tôi có một mảng rất lớn $large_list
, có cách nào để viết một hàm sẽ lấy mảng đó làm đối số không? Ví dụ:
echo_idx_array () {
arr="$1"
idx="$2"
echo "${arr[$idx]}"
}
Chiến lược thông thường để làm một cái gì đó như thế là gì? Tôi đã thử đưa ra biến $large_list
nhưng nó trống rỗng.
Tôi sẵn sàng sửa đổi hàm để điều chỉnh nó theo bất kỳ thay đổi nào trong danh sách đối số.
Đối với hồ sơ, tôi đang sử dụng ksh88 và tôi đang tìm kiếm câu trả lời là có thể mang theo.
EDIT : Cho đến nay, điều tốt nhất tôi có thể đưa ra là lặp qua mảng và gửi từng phần tử làm đối số cho hàm. Điều này có vẻ cực kỳ xấu xí và dễ bị lỗi, chưa kể rằng nó bị ràng buộc để đạt được một số giới hạn một cách nhanh chóng. Đây là những gì tôi đã làm:
foo () {
echo $*
}
cmd="foo "
while [[ $i -lt $MAX_ARR_SIZE ]]; do
cmd="$cmd ${large_list[$i]}"
((i=i+1))
done
eval $cmd
Không có cái gì tốt hơn để làm?
"${array[$@]}
. Đề nghị của bạn thực sự hoạt động. Mea culpa.
func "${array[@]}"
chưa? Nếu bạn chỉ cần truyền một phần tử, chỉ cần truyền phần tử - không cần làm cho nó trở nên phức tạp hơn bằng cách truyền một mảng và một chỉ mục.