Considera che ho un array molto grande $large_list
, c'è un modo per scrivere una funzione che prenderà l'array come argomento? Per esempio:
echo_idx_array () {
arr="$1"
idx="$2"
echo "${arr[$idx]}"
}
Qual è la solita strategia per fare qualcosa del genere? Ho provato a dare la variabile $large_list
ma era vuota.
Sono disposto a modificare la funzione per adattarla a qualsiasi modifica nell'elenco degli argomenti.
Per la cronaca, sto usando ksh88 e cerco risposte il più portatili possibile.
EDIT : Finora il meglio che potevo inventare è quello di passare in rassegna l'array e inviare ogni elemento come argomento alla funzione. Questo sembra incredibilmente brutto e soggetto a errori, per non parlare del fatto che è destinato a raggiungere rapidamente un certo limite. Ecco cosa ho fatto:
foo () {
echo $*
}
cmd="foo "
while [[ $i -lt $MAX_ARR_SIZE ]]; do
cmd="$cmd ${large_list[$i]}"
((i=i+1))
done
eval $cmd
Non c'è qualcosa di meglio da fare?
"${array[$@]}
. Il tuo suggerimento funziona davvero. Colpa mia.
func "${array[@]}"
? Se hai solo bisogno di passare un elemento, basta passare l'elemento - non è necessario renderlo più contorto passando un array e un indice.