${appArray[@]}
é expandido antes que fc_DEBUG
seja executado. Então, o segundo argumento que a função vê é o primeiro da matriz. Para ser explícito, os três argumentos fc_DEBUG
vê, são
$DEBUG "item1 -a -b" "item2 -c -d"
(substitua $ DEBUG pelas palavras resultantes do operador split + glob aplicado ao valor real de $ DEBUG (como você esqueceu de citar)). Em termos técnicos, o array é passado por valor, não por referência.
fc_DEBUG () {
if [ "$1" -eq 1 ] ; then
shift
echo "$@"
fi
}
Agora, o primeiro argumento é descartado da lista de argumentos com shift
e o restante de todos os argumentos é impresso.
Chame-o com um array entre aspas:
fc_DEBUG "$DEBUG" "${appArray[@]}"