GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Unterschied zwischen exportierten und nicht in Bash enthaltenen Shell-Variablen?

Bash scheint zwischen exportierten und nicht exportierten Variablen zu unterscheiden.

Beispiel:

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

set sieht die Variable aber env nicht.

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

set sieht beide Variablen außer env sieht nur die exportierte Variable.

Ich kenne diesen set ist eine eingebaute Bash und env ist nicht.

Was sind die Unterschiede zwischen exportierten und nicht exportierten Variablen?

Akzeptierte Antwort:

Exportierte Variablen werden in die Umgebung von Befehlen übertragen, die von der Shell ausgeführt werden, die sie exportiert hat, während nicht exportierte Variablen lokal für den aktuellen Shell-Aufruf sind. Aus dem export Manpage:

Die Shell soll den Variablen, die den spezifizierten Namen entsprechen, das Export-Attribut geben, was bewirkt, dass sie sich in der Umgebung von nachfolgend ausgeführten Befehlen befinden.

set gibt die aktuelle Umgebung aus, die alle lokalen nicht exportierten Variablen enthält. env wird verwendet, um Programme in einer neuen Umgebung zu starten, und gibt ohne Argumente aus, wie diese neue Umgebung aussehen würde. Da env eine neue Umgebung erstellt, werden nur exportierte Variablen übertragen, wie dies bei jedem Programm der Fall ist, das von dieser Shell aus gestartet wird. Zum Beispiel das Spawnen einer zweiten Shell innerhalb der ersten (ich habe $$ verwendet um Eingabeaufforderungen in der inneren Shell darzustellen):

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

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

Beachten Sie, dass die Variable exportiert wird, nicht nur ihr Wert. Das bedeutet, sobald Sie export FOO , FOO wird eine globale Variable und taucht in nachfolgenden Umgebungen auf, auch wenn sie später geändert werden:

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

Linux
  1. Unterschied zwischen Login-Shell und Nicht-Login-Shell?

  2. Unterschied zwischen ' und ' in der Befehlszeile (bash)??

  3. Der Unterschied in der Verwendung zwischen Shell-Variablen und Umgebungsvariablen?

  4. Welches sind die speziellen Parameter/Variablen der (Bash-)Shell?

  5. Linux – Was ist der Unterschied zwischen `su -` und `su –login`?

Unterschied zwischen der Definition von Bash-Variablen mit und ohne Export

Was ist der Unterschied zwischen Login- und Non-Login-Shell

Unterschied zwischen einfachen und doppelten Anführungszeichen in Bash Shell

Was ist der Unterschied zwischen einer Konsole, einem Terminal und einer Shell?

Unterschied zwischen ${} und $() in Bash

Was ist der Unterschied zwischen &> und >&in bash?