child.sh takes each of the strings passed on the command line and tries to execute them as a program. However, it does not split them with IFS. You want to "eval $i", like this
# this is child.sh
for i in "$@"
if [ "$i" != "" ]; then
By the way, you can put ode fragments in [code] tags - this will preserve formatting and use a fixed width font to aid readability.
Regarding he exporting of arrays: environment variables are passed between processes as an array of strings only.