Perca o heredoc e ele deve funcionar bem:
#!/bin/bash
for ((i=0; i<=20;i++));do
MYFUNCTION "-$i"
done
alternativamente, você pode usar um heredoc com citação simples , o que impedirá que o $i
de seja interpolado do contexto externo onde não está definido :
#!/bin/bash
bash << '_EOF_'
for ((i=0; i<=20;i++));do
MYFUNCTION "-$i"
done
_EOF_
mas dificilmente há uma boa razão para começar outra parte de um processo bash recém-iniciado.