Eu não acho que você precise do 'eval' (...) & " sintaxe. Basta fazer isso em vez disso:
cmd1 &
pid1=$!
cmd2 &
pid2=$!
Mas, do contrário, sua abordagem parece boa para mim.
Exemplo
$ more ex.bash
#!/bin/bash
sleep 10 &
pid1=$!
sleep 10 &
pid2=$!
echo "ID1: $pid1 --- ID2: $pid2"
Agora, quando eu executo:
$ ./ex.bash
ID1: 27866 --- ID2: 27867
Podemos confirmar que isto está correto:
$ pgrep -l sleep
27866 sleep
27867 sleep