Acho que seu problema é o uso de eval
. Se você pegar seu script e usar matrizes para armazenar os comandos antes de executá-lo, isso será suficiente para executar esses comandos.
#!/bin/bash
CMD1=(echo "onecmd")
CMD2=(printf "%s\n" ascrip*)
CMD3='echo cmd3'
${CMD1[@]}
${CMD2[@]}
$CMD3
Não é necessário executá-las por eval
.
Exemplo
$ ./ascript.bash
onecmd
ascript.bash
cmd3
Depuração
Você pode ver o que está acontecendo nos bastidores, se você ativar o modo de depuração do Bash.
$ bash -x ./ascript.bash
+ CMD1=(echo "onecmd")
+ CMD2=(printf "%s\n" ascrip*)
+ CMD3='echo cmd3'
+ echo onecmd
onecmd
+ printf '%s\n' ascript.bash
ascript.bash
+ echo cmd3
cmd3