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

5380
Adam Matan

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 ganz.

45
Könnte jemand das bitte bearbeiten? Dies hat 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. innaM vor 15 Jahren 0
Ich stehe korrigiert. Adam Matan vor 15 Jahren 0

4 Antworten auf die Frage

50
Mike McQuaid

export gibt die Variable an Unterprozesse weiter.

Zum Beispiel, wenn Sie es getan haben

FOO=bar 

dann würde ein Subprozess, der nach FOO geprüft hat, die Variable nicht finden

export FOO=bar 

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

Wenn FOOjedoch bereits eine Umgebungsvariable definiert wurde, FOO=barändert sich der Wert dieser Umgebungsvariablen.

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.

Actually, if you don't use "`export`", you're not defining an environment variable, but just a shell variable. Shell variables are only available to the shell process; environment variables are available to *any* subsequent process, not just shells. In addition, subshells are commands contained within parentheses, which do have access to shell variables, whereas what you're talking about are child processes that happen to be shells. wfaulk vor 15 Jahren 31
Wo sind diese gespeichert? HDave vor 11 Jahren 0
27
wfaulk

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

Shell-Variablen sind nur für den Shell-Prozess verfügbar. Umgebungsvariablen sind für jeden nachfolgenden Prozess verfügbar, nicht nur für Shells.

2
alok

Wenn Sie möchten, dass die Variable der exportierenden Shell zur Verfügung steht, können Sie Folgendes tun:

Datei a.ksh ist -

#!/bin/ksh FOO=bar 

Führen Sie an der Eingabeaufforderung Folgendes aus

> . a.ksh 

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

Wohingegen,

> a.ksh 

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

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

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.