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

Exécution des opérations suivantes à partir d’un écran de ligne de commande:

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

n’affiche rien. C’est bon? Comment atsortingbuer une valeur à une variable dans ce type d’exécution?

Il y a deux coquilles impliquées ici:

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

  • Le shell non-login, non-interactif, engendré par bash -c

Maintenant, le problème est que, entre guillemets doubles, les variables sont étendues à leurs valeurs respectives, ceci est vrai pour tout shell.

Ainsi, comme vous avez utilisé des guillemets doubles, la variable de développement, $v , a effectivement lieu 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 le développement de la variable aient lieu dans le shell engendré, utilisez des guillemets simples ou un échappement $ :

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

Avec des guillemets doubles, $v est remplacé par le shell interactif. Utilisez des guillemets simples:

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