bash -c “v = valeur; echo $ v ”n'affiche rien

Réponses:

18

Il y a deux obus impliqués ici:

  • Le shell appelant, le shell interactif à partir duquel vous exécutez ce

  • Le shell sans connexion, non interactif, généré par bash -c

Maintenant, le problème est que, entre guillemets, les variables sont développées à leurs valeurs respectives, cela est vrai pour n'importe quel shell.

Donc, comme vous avez utilisé des guillemets doubles, l'expansion variable, $vse déroule en fait dans le shell appelant, pas dans le shell appelé. Mais la déclaration v=value,, a lieu sur le shell non interactif appelé.

Donc, au total, vous avez la variable définie dans le shell appelé et développée (au préalable) dans le shell appelant. Comme la variable de valeur n'est pas définie dans le shell appelant, vous n'obtenez rien dans la sortie.

Maintenant, pour que la définition et l'expansion des variables aient lieu dans le shell généré, utilisez des guillemets simples ou échappez $:

$ bash -c "v=value; echo $v"

$ bash -c 'v=value; echo $v'
value

$ bash -c "v=value; echo \$v"
value
heemayl
la source
1

Avec des guillemets doubles $vest remplacé par le shell interactif. Utilisez des guillemets simples:

$ bash -c 'v=value;echo $v'
value

la source