Différence entre “a = b” et “export a = b” dans bash


50

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.


Quelqu'un pourrait-il s'il vous plaît modifier cela? Ce n’est pas du tout lié à Linux, mais dépend uniquement du shell que vous utilisez. Je suppose que c'est bash ici, qui fonctionne aussi sous Windows.
InnaM

Je me suis trompé.
Adam Matan

Réponses:


54

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 FOOa déjà été défini en tant que variable d'environnement, alors FOO=barmodifiera 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=barsyntaxe; tu devais écrire FOO=bar; export FOO.


33
En fait, 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 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.
wfaulk

Où sont-ils stockés?
HDave

28

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.


2

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.


1
Correct. Notez que "." est juste un raccourci pour "source", qui est parfois utilisé dans les scripts pour une meilleure lisibilité. Voir "aide". ou "source d'aide" pour plus de détails.
Sleske

1

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.