Considere que eu tenho uma matriz muito grande $large_list
, existe uma maneira de escrever uma função que levará a matriz como argumento? Por exemplo:
echo_idx_array () {
arr="$1"
idx="$2"
echo "${arr[$idx]}"
}
Qual é a estratégia usual para fazer algo assim? Eu tentei dar a variável, $large_list
mas estava vazia.
Estou disposto a modificar a função para adaptá-la a qualquer alteração na lista de argumentos.
Para constar, estou usando o ksh88 e estou procurando respostas o mais portáteis possível.
EDIT : Até agora, o melhor que eu poderia fazer é percorrer a matriz e enviar cada elemento como argumento para a função. Isso parece incrivelmente feio e propenso a erros, sem mencionar que é provável que atinja algum limite rapidamente. Aqui está o que eu fiz:
foo () {
echo $*
}
cmd="foo "
while [[ $i -lt $MAX_ARR_SIZE ]]; do
cmd="$cmd ${large_list[$i]}"
((i=i+1))
done
eval $cmd
Não há algo melhor para fazer?
"${array[$@]}
. Sua sugestão realmente funciona. Mea culpa.
func "${array[@]}"
? Se você só precisa passar um elemento, basta passá-lo - não há necessidade de torná-lo mais complicado passando uma matriz e um índice.