Потеряйте heredoc , и он должен работать нормально:
#!/bin/bash
for ((i=0; i<=20;i++));do
MYFUNCTION "-$i"
done
в качестве альтернативы вы можете использовать одинарный heredoc , который предотвратит $ i
] из , интерполированного из внешнего контекста, где он не установлен :
#!/bin/bash
bash << '_EOF_'
for ((i=0; i<=20;i++));do
MYFUNCTION "-$i"
done
_EOF_
, но вряд ли есть веская причина для запуска другого bash из только что запущенного процесса bash.