Normalmente, é possível definir uma variável de ambiente para um comando prefixando-o assim:
hello=hi bash -c 'echo $hello'
Eu também sei que podemos usar uma variável para substituir qualquer parte de uma invocação de comando como o seguinte:
$ cmd=bash
$ $cmd -c "echo hi" # equivalent to bash -c "echo hi"
Fiquei muito surpreso ao descobrir que você não pode usar uma variável para prefixar um comando para definir uma variável de ambiente. Caso de teste:
$ prefix=hello=hi
$ echo $prefix # prints hello=hi
$ $prefix bash -c 'echo $hello'
hello=hi: command not found
Por que não posso definir a variável de ambiente usando uma variável? A parte do prefixo é uma parte especial? Consegui fazer funcionar usando eval na frente, mas ainda não entendi o porquê. Estou usando o bash 4.4.