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.
env
place deeval
, lequel IIRC est plus sûr, mais plus lent.