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, env
sieht aber nur die exportierte Variable.
Ich weiß, dass dies set
eine eingebaute Bash ist und env
nicht.
Was sind die Unterschiede zwischen exportierten und nicht exportierten Variablen?
shell
environment-variables
Lesmana
quelle
quelle
Antworten:
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 für den aktuellen Shell-Aufruf lokal sind. Von der
export
Manpage: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. Ohne Argumente wird ausgegeben, wie diese neue Umgebung aussehen würde. Daenv
eine neue Umgebung erstellt wird, werden nur exportierte Variablen durchgelassen, wie dies bei jedem Programm der Fall ist, das von dieser Shell aus gestartet wird. Zum Beispiel, eine zweite Shell innerhalb der ersten$$
zu erzeugen (ich habe Eingabeaufforderungen in der inneren Shell dargestellt):Beachten Sie, dass die Variable exportiert wird und nicht nur der Wert. Dies bedeutet , dass , wenn Sie
export FOO
,FOO
eine globale Variable und zeigt sich in den folgenden Umgebungen wird, auch wenn später geändert:quelle
locale
für die aktuelle Shell die Updates nicht angezeigt?