que dan cuenta de esta pregunta es casi dos años, pero me ayudó a averiguar la respuesta real a la pregunta original, que ninguna de las respuestas anteriores realmente hacen (@ata y respuestas de @ l0b0). La pregunta era "¿Cómo paso una matriz a una función bash?", Mientras @ata estaba cerca de hacerlo bien, su método no termina con una matriz real para usar dentro de la función misma. Se necesita una pequeña adición.
Así, suponiendo que teníamos anArray=(a b c d)
algún lugar antes de la función do_something_with_array()
llamar, así es como nos gustaría definir la función:
function do_something_with_array {
local tmp=$1[@]
local arrArg=(${!tmp})
echo ${#arrArg[*]}
echo ${arrArg[3]}
}
Ahora
do_something_with_array anArray
de llevar correctamente la salida:
4
d
Si existe la posibilidad de que algunos elemento (s) de su ar ray puede contener espacios, debe establecer IFS
en un valor que no sea SPACE, y luego de nuevo después de haber copiado arg (s) de la matriz de la función en matrices locales. Por ejemplo, mediante los métodos anteriores:
local tmp=$1[@]
prevIFS=$IFS
IFS=,
local arrArg=(${!tmp})
IFS=$prevIFS
Muy bien, eso funciona: test() { locales ref = $ 1 [@] para PKG en $ {! ref}; hacer echo "1 $ PKG 2" hecho } ar = (abc) prueba ar – johndir
uso 'de PKG en "$ {! ref}"' o de lo contrario el bucle será frágil con respecto a los espacios en la matriz elementos (por ejemplo, 'ar = (a" bc "d)'). –
@glenn jackman: secundó – ata