No puede. Las funciones toman parámetros posicionales como cualquier otro comando.
Tenga en cuenta también que su solución alternativa no permite que ninguno de los elementos de "matriz" contenga espacios en blanco.
Lo más limpia que puedo pensar es exigir que la persona que llama a crear una matriz local, luego leerlo desde la función:
$ foo() {
for element in $FOO_ARRAY
do
echo "[$element]"
done
}
$ local FOO_ARRAY; FOO_ARRAY=(foo bar baz quux)
$ foo
[foo]
[bar]
[baz]
[quux]
Sé que hace bash acrobacias similares para su sistema de finalización, y creo zsh podría, también. No es muy inusual
Tenga en cuenta que nada de lo anterior realmente funciona. –