Você pode, mais ou menos. Bash e ksh93 possuem referências de nome, que são um pouco como ponteiros e permitem que você passe o array nome para a função, e use-o de lá, diga:
#!/bin/bash
function byname {
typeset -n _p=$1
echo "second item of '$1' is ${_p[1]}"
echo "second arg to this function is \"$2\""
}
blah=(a b c)
byname blah "other arg"
Embora no Bash, o nome do nameref ( _p
here) deve ser diferente do nome da variável para a qual ele aponta, portanto, não é muito utilizável com funções recursivas. No ksh, ele trabalha com o mesmo nome apenas em funções de estilo ksh ( function foo
em vez de foo()
).
Como diz o rótulo, é uma referência , não uma cópia, por isso, se você modificar a matriz na função, as alterações serão exibidas no programa principal.
A outra alternativa, pior, é concatenar a matriz para uma string e passá-la como uma variável:
function concated {
echo "the whole array is \"$1\""
}
concated "${blah[*]}"
Mas isso praticamente impossibilita o uso de um array, a menos que você crie um sistema elaborado de array para o empacotamento de strings.
As chamadas acima da impressão do curso:
second item of 'blah' is b
second arg to this function is "other arg"
the whole array is "a b c"