79 votes

Différence entre "a=b" et "export a=b" en bash

Quelle est la différence entre :

a=b

y

export a=b

Dans bash ?

Je comprends qu'ils définissent tous deux des variables d'environnement, mais je ne comprends pas bien la différence.

80voto

jamting Points 893

export propage la variable aux sous-processus.

Par exemple, si vous avez

FOO=bar

alors un sous-processus qui vérifierait FOO ne trouverait pas la variable alors que

export FOO=bar

permettrait au sous-processus de le trouver.

Mais si FOO tiene déjà a été défini comme une 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 anciens shells ne supportaient pas l'option export FOO=bar syntaxe ; vous deviez écrire FOO=bar; export FOO .

38voto

Ferruccio Points 51508

Si vous n'utilisez pas 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 les shells.

3voto

Harsh Points 221

De plus, si vous voulez que la variable soit disponible pour le Shell appelant sans utiliser l'exportation, vous pouvez faire ceci :

Le fichier a.ksh est -

#!/bin/ksh
FOO=bar

Sur l'invite, exécutez ceci

> . a.ksh

Ceci lancera les commandes dans le même Shell et $FOO sera disponible.

Considérant que,

> a.ksh

Rendra $FOO disponible uniquement dans a.ksh, après l'appel à a.ksh, il n'existera plus.

2voto

jlliagre Points 13539

En plus de ce qui a déjà été répondu, ces deux déclarations ne définissent pas nécessairement (c'est-à-dire créent vs définissent) une variable d'environnement car "a" pourrait déjà exister en tant que Shell ou variable d'environnement.

Dans ce dernier cas, les deux déclarations sont strictement équivalentes.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X