Unterschied zwischen "a = b" und "export a = b" in bash


50

Was ist der Unterschied zwischen:

a=b

und

export a=b

In Bash?

Ich verstehe, dass beide Umgebungsvariablen definieren, aber ich verstehe den Unterschied nicht vollständig.


Könnte jemand das bitte bearbeiten? Dies hat überhaupt nichts mit Linux zu tun, sondern hängt nur von der verwendeten Shell ab. Ich denke es ist bash hier, was auch unter Windows funktioniert.
Uhr

Ich stehe korrigiert.
Adam Matan

Antworten:


54

export Leitet die Variable an Unterprozesse weiter.

Zum Beispiel, wenn Sie es getan haben

FOO=bar

dann würde ein auf FOO überprüfter Unterprozess die Variable while nicht finden

export FOO=bar

würde es dem Unterprozess ermöglichen, es zu finden.

Wenn dies FOOjedoch bereits als Umgebungsvariable definiert wurde, FOO=barwird der Wert dieser Umgebungsvariablen geändert.

Zum Beispiel:

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"

Ältere Shells unterstützten die export FOO=barSyntax nicht. Sie hatte zu schreiben FOO=bar; export FOO.


33
Wenn Sie " export" nicht verwenden , definieren Sie keine Umgebungsvariable, sondern nur eine Shell-Variable. Shell-Variablen stehen nur dem Shell-Prozess zur Verfügung. Umgebungsvariablen stehen für jeden nachfolgenden Prozess zur Verfügung, nicht nur für Shells. Subshells sind außerdem Befehle in Klammern, die Zugriff auf Shell-Variablen haben, während Sie von untergeordneten Prozessen sprechen, die zufällig Shells sind.
Wfaulk

Wo werden diese aufbewahrt?
HDave

28

Wenn Sie nicht verwenden export, definieren Sie keine Umgebungsvariable. nur eine Shell-Variable.

Shell-Variablen stehen nur dem Shell-Prozess zur Verfügung. Umgebungsvariablen stehen für jeden nachfolgenden Prozess zur Verfügung, nicht nur für Shells.


2

Wenn Sie möchten, dass die Variable für die aufrufende Shell verfügbar ist, ohne den Export zu verwenden, können Sie Folgendes tun:

Die Datei a.ksh lautet -

#!/bin/ksh
FOO=bar

Führen Sie dies an der Eingabeaufforderung aus

> . a.ksh

Dadurch werden die Befehle in derselben Shell ausgeführt und $ FOO ist verfügbar.

Wohingegen,

> a.ksh

Wird $ FOO nur innerhalb von a.ksh verfügbar machen, nach dem Aufruf von a.ksh würde es nicht existieren.


1
Richtig. Beachten Sie, dass "." ist nur eine Abkürzung für "Quelle", die manchmal in Skripten zur besseren Lesbarkeit verwendet wird. Siehe "Hilfe". oder "Hilfequelle" für Details.
sleske

1

Zusätzlich zu dem, was bereits beantwortet wurde, definieren diese beiden Anweisungen nicht notwendigerweise eine Umgebungsvariable (dh create vs set), da "a" möglicherweise bereits als Shell- oder Umgebungsvariable vorhanden ist.

Im letzteren Fall sind beide Aussagen absolut gleichwertig.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.