Isso é bem interessante. O problema é que o escopo da função está substituindo o do script. Não consigo ver uma maneira simples de contornar isso.
No entanto, você pode simplesmente passar as variáveis como argumentos (para a função):
function_name () {
[[ $# == 3 ]] && echo
}
function_name $@
Ou você pode:
- Passe
$# $@, verifiqueeecho - Passe
$# $@, verifique,shifte, em seguida,echo - Armazene
$@como uma variável no nível do script e acesse-a na função