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.
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.
Antworten:
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 FOO
jedoch bereits als Umgebungsvariable definiert wurde, FOO=bar
wird 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=bar
Syntax nicht. Sie hatte zu schreiben FOO=bar; export FOO
.
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.
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.
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.