Quelle est la différence entre:
a=b
et
export a=b
En bash?
Je comprends qu’ils définissent tous les deux des variables d’environnement, mais je ne comprends pas bien la différence.
bash
shell
process
environment-variables
Adam Matan
la source
la source
Réponses:
export
propage la variable aux sous-processus.Par exemple, si vous avez fait
puis un sous-processus qui a vérifié FOO ne trouverait pas la variable alors que
permettrait au sous-processus de le trouver.
Mais si
FOO
a déjà été défini en tant que variable d'environnement, alorsFOO=bar
modifiera la valeur de cette variable d'environnement.Par exemple:
Les coquilles plus anciennes ne supportaient pas la
export FOO=bar
syntaxe; tu devais écrireFOO=bar; export FOO
.la source
export
", vous ne définissez pas une variable d'environnement, mais simplement une variable shell. Les variables shell ne sont disponibles que pour le processus shell; Les variables d'environnement sont disponibles pour tout processus ultérieur, pas seulement pour les shells. En outre, les sous-shell sont des commandes contenues entre parenthèses, qui ont accès aux variables de shell, alors que vous parlez de processus enfants qui se trouvent être des shells.Si vous n'utilisez pas
export
, vous ne définissez pas de variable d'environnement; juste une variable shell.Les variables shell ne sont disponibles que pour le processus shell; Les variables d'environnement sont disponibles pour tout processus ultérieur, pas seulement pour les shells.
la source
En outre, si vous souhaitez que la variable soit disponible pour le shell appelant sans utiliser l'exportation, vous pouvez procéder comme suit:
Le fichier a.ksh est -
À l'invite, exécutez ceci
Cela exécutera les commandes dans le même shell et $ FOO sera disponible.
Tandis que,
Rendra $ FOO disponible uniquement dans a.ksh, après l'appel à a.ksh, il n'existerait pas.
la source
En plus de ce qui a déjà été répondu, ces deux instructions ne définissent pas nécessairement (c.-à-d. Create vs set) une variable d'environnement comme "a" peut déjà exister en tant que variable d'environnement ou de shell.
Dans ce dernier cas, les deux déclarations sont strictement équivalentes.
la source