A pergunta é " Deve uma matriz bash ser usada no lugar de eval set -" $ params "?", e a resposta é yes! .
No seu script, a entrada para eval é claramente não devidamente higienizada. Experimente
yourscript ''xterm''
e você verá que um xterm é iniciado, mesmo que os backticks sejam citados corretamente por aspas simples. (Compare com
echo ''xterm''
que não inicia um xterm.
Corrigir o erro enquanto mantém eval
é muito difícil.
Mesmo mudando a linha
params="$params \"$param\"";;
para
params="$params '$param'";;
não ajudaria: agora
yourscript ''xterm''
não inicia mais um xterm, mas
yourscript \'' 'xterm' '\'
ainda faz.