Normalement, il est possible de définir une variable d'environnement pour une commande en la préfixant comme ceci:
hello=hi bash -c 'echo $hello'
Je sais également que nous pouvons utiliser une variable pour remplacer n'importe quelle partie d'un appel de commande comme suit:
$ cmd=bash
$ $cmd -c "echo hi" # equivalent to bash -c "echo hi"
J'ai été très surpris de découvrir que vous ne pouvez pas utiliser une variable pour préfixer une commande pour définir une variable d'environnement. Cas de test:
$ prefix=hello=hi
$ echo $prefix # prints hello=hi
$ $prefix bash -c 'echo $hello'
hello=hi: command not found
Pourquoi ne puis-je pas définir la variable d'environnement à l'aide d'une variable? La partie préfixe est-elle une partie spéciale? J'ai pu le faire fonctionner en utilisant eval en face, mais je ne comprends toujours pas pourquoi. J'utilise bash 4.4.
envplace deeval, lequel IIRC est plus sûr, mais plus lent.