Exécution de ce qui suit à partir d'un écran de ligne de commande:
bash -c "v=value; echo $v"
n'affiche rien. C'est bon? Comment puis-je affecter une valeur à une variable à l'intérieur de ce type d'exécution?
bash
environment-variables
Josep Cols
la source
la source
Réponses:
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,
$v
se déroule en fait dans le shell appelant, pas dans le shell appelé. Mais la déclarationv=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
$
:la source
Avec des guillemets doubles
$v
est remplacé par le shell interactif. Utilisez des guillemets simples:la source