Variables du shell et variables d'environnement
MY_HOME="/home/my_user"
définit la variable shell appelée MY_HOME
. Les shells sont des langages de programmation et ont des variables (également appelées paramètres). Après cette affectation, vous pouvez utiliser la valeur de la variable, par exemple avec echo "$MY_HOME"
.
Les variables de shell sont un concept de shell interne. Lorsque cette instance de shell se termine, MY_HOME
est oublié. Ce que chaque programme connaît et transmet à ses enfants, ce sont les variables d'environnement .
À l'intérieur du shell, les variables d'environnement et les variables de shell fonctionnent de manière très similaire. En réalité, toutes les variables d'environnement que le shell hérite de son parent deviennent des variables de shell. Inversement, une variable shell définie dans un script shell deviendra une variable d'environnement si vous l' exportez .
export MY_HOME="/home/my_user"
Plus de détails que vous pouvez ignorer lors de la première lecture
La raison pour laquelle les variables shell ne deviennent pas automatiquement des variables d'environnement est en partie qu'un script peut accidentellement utiliser un nom de variable significatif pour un programme qu'il lance, et en partie juste historique.
Certains shells très anciens doivent export
être utilisés chaque fois que vous modifiez un nom de variable, mais tous les shells modernes gardent une trace des affectations des variables d'environnement, de sorte que l'extrait de code suivant résonne bar
:
myvar=foo
export myvar
myvar=bar
env | grep '^myvar='
De plus, certains très anciens shells nécessitaient des commandes distinctes pour myvar=foo
et export myvar
, mais tous les shells modernes le comprennent export myvar=foo
.
Vous pouvez exécuter set -a
de faire toutes les assignations de variables shell exporter automatiquement la variable, de sorte que myvar=foo
équivaut à export myvar=foo
si vous avez exécuté set -a
dans cette coquille d' abord.
Sur devis
La citation est principalement orthogonale. Si la valeur que vous attribuez à la variable ne contient aucun caractère spécial pour le shell, vous n'avez pas besoin de guillemets. S'il y a des caractères spéciaux, vous devez les protéger avec des guillemets simples ou doubles ou des barres obliques inverses ou une combinaison de ceux-ci. Cela vaut pour la myvar=value
syntaxe simple et l' export
utilitaire.
Il existe une différence entre la syntaxe d'affectation et la export
syntaxe. L'interpréteur de commandes étend les résultats des substitutions de variables $foo
, en effectuant la division de champ (mot) et l' expansion de nom de chemin (globbing) . Cela signifie que si la valeur de myvar
est hello *
, alors echo $myvar
imprime hello
suivi d'un espace unique suivi de la liste des fichiers dans le répertoire courant. Ceci est presque jamais souhaitable, d' où le principe général à toujours utiliser des guillemets doubles autour de substitutions variables (sauf si vous savez que vous avez besoin PathName l' expansion ou le fractionnement du champ): echo "$myvar"
. Dans le cas d'une simple cession, othervar=$myvar
en fait fiable copie la valeur de myvar
laothervar
, car le globbing et le fractionnement de mots sont inhibés dans les affectations (car ils créent plusieurs mots, mais un seul mot est attendu). Cette dispense ne s'applique export
cependant pas. Donc, si vous voulez vous souvenir d'une règle simple, utilisez toujours des guillemets doubles autour des substitutions de variables.