Você pode ocultar o loop for
em uma função do shell. Aqui está uma implementação bastante frágil com base no exemplo da sua pergunta:
loop ()
{
for i in 'echo $3 |tr ',' ' '';
do
for j in 'echo $5 |tr ',' ' '';
do
$1 $2 $i $4 $j;
done;
done;
}
Em seguida, a função seria chamada como loop some-command -a john,jane -b doe,roe
. Por exemplo:
$ for i in /{bin,media}; do for j in /{srv,tmp/tmp}; do \ls -d $i $j; done; done
/bin /srv
/bin /tmp/tmp
/media /srv
/media /tmp/tmp
$ loop ls -d /bin,/media "" /srv,/tmp/tmp
/bin /srv
/bin /tmp/tmp
/media /srv
/media /tmp/tmp
$ _