GNU/Linux >> Tutoriels Linux >  >> Linux

Différence entre les variables Shell qui sont exportées et celles qui ne sont pas dans Bash ?

Bash semble faire la différence entre les variables qui ont été exportées et celles qui ne l'ont pas été.

exemple :

$ FOO=BAR
$ env | grep FOO
$ set | grep FOO
FOO=BAR

set voit la variable mais env pas.

$ export BAR=FOO
$ env | grep FOO
BAR=FOO
$ set | grep FOO
BAR=FOO
FOO=BAR

set voit les deux variables mais env ne voit que la variable exportée.

Je sais que set est un bash intégré et env n'est pas.

Quelles sont les différences entre les variables qui sont exportées et celles qui ne le sont pas ?

Réponse acceptée :

Les variables exportées sont transportées dans l'environnement des commandes exécutées par le shell qui les a exportées, tandis que les variables non exportées sont locales à l'invocation actuelle du shell. Depuis l'export page de manuel :

Le shell donnera l'attribut export aux variables correspondant aux noms spécifiés, ce qui les placera dans l'environnement des commandes exécutées ultérieurement.

set génère l'environnement actuel, qui inclut toutes les variables locales non exportées. env est utilisé pour lancer des programmes dans un nouvel environnement, et sans arguments affichera ce que serait ce nouvel environnement. Depuis env crée un nouvel environnement, seules les variables exportées sont transférées, comme c'est le cas pour tout programme lancé à partir de ce shell. Par exemple, générer un deuxième shell dans le premier (j'ai utilisé $$ pour représenter les invites dans le shell interne) :

$ FOO=BAR
$ bash
$$ echo $FOO             # Note the empty line

$$ exit
$ export FOO
$ bash
$$ echo $FOO
BAR
$$

Notez que c'est la variable qui est exportée, pas seulement sa valeur. Cela signifie qu'une fois que vous avez export FOO , FOO devient une variable globale et apparaît dans les environnements suivants, même s'il est modifié ultérieurement :

$ export FOO
$ FOO=BAR
$ bash
$$ echo $FOO
BAR
$$

Linux
  1. La différence entre une commande intégrée et une qui ne l'est pas ?

  2. La Différence Entre [[ $a ==Z* ]] Et [ $a ==Z* ] ?

  3. Linux – Quelle est la différence entre `su -` et `su –login` ?

  4. bash :définir la variable d'environnement de tableau et la déréférencer à partir de n'importe quel script shell échoue

  5. Quelle est la différence entre nohup et esperluette

Différence entre la définition de variables bash avec et sans exportation

Quelle est la différence entre la connexion et le shell sans connexion

Différence entre les guillemets simples et doubles dans Bash Shell

Quelle est la différence entre une console, un terminal et un shell ?

Quelle est la différence entre #!/usr/bin/env bash et #!/usr/bin/bash ?

Quelle est la différence entre exécuter un script Bash et le sourcer ?