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.
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.
Réponses:
export
propage la variable aux sous-processus.
Par exemple, si vous avez fait
FOO=bar
puis un sous-processus qui a vérifié FOO ne trouverait pas la variable alors que
export FOO=bar
permettrait au sous-processus de le trouver.
Mais si FOO
a déjà été défini en tant que variable d'environnement, alors FOO=bar
modifiera la valeur de cette variable d'environnement.
Par exemple:
FOO=one # Not an environment variable
export FOO # Now FOO is an environment variable
FOO=two # Update the environment variable, so sub processes will see $FOO = "two"
Les coquilles plus anciennes ne supportaient pas la export FOO=bar
syntaxe; tu devais écrire FOO=bar; export FOO
.
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.
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 -
#!/bin/ksh
FOO=bar
À l'invite, exécutez ceci
> . a.ksh
Cela exécutera les commandes dans le même shell et $ FOO sera disponible.
Tandis que,
> a.ksh
Rendra $ FOO disponible uniquement dans a.ksh, après l'appel à a.ksh, il n'existerait pas.
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.