A melhor maneira é passar como argumentos de posição. Nada mais. Você pode passar como string, mas dessa maneira pode causar alguns problemas. Exemplo:
array=(one two three four five)
function show_passed_array(){
echo $@
}
ou
function show_passed_array(){
while $# -gt 0;do
echo $1;shift
done
}
show_passed_array ${array[@]}
resultado:
one two three four five
Você quer dizer que se o valor da matriz possui símbolos de espaço, você deve citar os elementos antes de passar para acessar o valor pelo índice na função, usar parâmetros de posição $ 1 $ 2 $ 3 .... Onde o índice 0 -> 1, 1 -> 2, ... Para iterar o acesso, é melhor usar sempre $ 1 e depois do Shift. Nada adicional é necessário. Você pode passar argumentos sem nenhuma matriz como esta:
show_passed_array one two three four five
bash media cria automaticamente uma matriz a partir de argumentos passados que os passaram a funcionar e, em seguida, você tem argumentos de posição. Além disso, quando você escreve $ {array [2]}, realmente escreve o argumento consequente um dois três quatro e os passa para a função. Portanto, essas chamadas são equivalentes.