O problema não está na recursão, está no loop sobre os itens. Se você tentar isso como acima, você não consegue o que espera:
$ targets=(aaa bbb ccc ddd)
$ for i in $targets; do echo $i; done
aaa
Para fazer um loop sobre o array, você precisa gerar uma lista dos itens no array, por exemplo, este link :
Então você tem
#!/bin/bash
# recur.sh
targets=('aaa' 'bbb' 'ccc' 'ddd')
if [ "$1" == "all" ] ; then
for i in ${targets[@]}; do
echo $2" --> "$i
./$0 $i $2
done
exit 0
fi
echo "Target "$1" just received command '"$2"'"
exit 0