Considere que tengo una matriz muy grande $large_list
, ¿hay alguna manera de escribir una función que tome la matriz como argumento? Por ejemplo:
echo_idx_array () {
arr="$1"
idx="$2"
echo "${arr[$idx]}"
}
¿Cuál es la estrategia habitual para hacer algo así? Intenté dar la variable $large_list
pero estaba vacía.
Estoy dispuesto a modificar la función para adaptarla a cualquier cambio en la lista de argumentos.
Para el registro, estoy usando ksh88, y estoy buscando respuestas lo más portátiles posible.
EDITAR : Hasta ahora, lo mejor que se me ocurre es recorrer la matriz y enviar cada elemento como argumento a la función. Esto parece increíblemente feo y propenso a errores, sin mencionar que seguramente alcanzará algún límite rápidamente. Esto es lo que hice:
foo () {
echo $*
}
cmd="foo "
while [[ $i -lt $MAX_ARR_SIZE ]]; do
cmd="$cmd ${large_list[$i]}"
((i=i+1))
done
eval $cmd
¿No hay algo mejor que hacer?
"${array[$@]}
. Su sugerencia realmente funciona. Mea culpa.
func "${array[@]}"
? Si solo necesita pasar un elemento, simplemente pase el elemento; no es necesario hacerlo más complicado al pasar una matriz y un índice.