1249 Stimmen

Definieren einer Variable mit oder ohne Export

Wofür ist export?

Was ist der Unterschied zwischen:

export name=value

und

name=value

2 Stimmen

5voto

Hier ist ein weiteres Beispiel:

VARTEST="Wert von VARTEST"
#export VARTEST="Wert von VARTEST"
sudo env | grep -i vartest
sudo echo ${SUDO_USER} ${SUDO_UID}:${SUDO_GID} "${VARTEST}"
sudo bash -c 'echo ${SUDO_USER} ${SUDO_UID}:${SUDO_GID} "${VARTEST}"'

Nur durch Verwendung von export VARTEST ist der Wert von VARTEST in sudo bash -c '...' verfügbar!

Weitere Beispiele finden Sie unter:

3voto

Will Punkte 1201

Nur um den Unterschied zwischen einer exportierten Variable, die sich in der Umgebung (env) befindet, und einer nicht exportierten Variable, die sich nicht in der Umgebung befindet, zu zeigen:

Wenn ich das mache:

$ MYNAME=Fred
$ export OURNAME=Jim

dann erscheint nur $OURNAME in der Umgebung. Die Variable $MYNAME ist nicht in der Umgebung.

$ env | grep NAME
OURNAME=Jim

aber die Variable $MYNAME existiert in der Shell

$ echo $MYNAME
Fred

0 Stimmen

Hallo Will, kann ich eine Variable exportieren, bevor die Variable deklariert wird? wie exportiere OURNAME und dann OURNAME=Jim?

0 Stimmen

@leoleohu, wenn du UNSERNAME exportierst, bevor du ihn zuweist, exportierst du einfach nur einen leeren String.

0 Stimmen

@ingernet Auch wenn Sie eine Variable exportieren, bevor Sie sie zuordnen, wird jeder Wert, der dieser Variable bis vor dem Aufruf des Kindprozesses zugewiesen wird, vom Kindprozess gesehen. Sobald jedoch der Kindprozess aufgerufen wird, werden keine Updates der exportierten Variable im Elternprozess vom Kindprozess gesehen, weil die Variablen beim Aufruf des Prozesses durch Wert kopiert werden.

3voto

Amjad Punkte 2320

Standardmäßig sind Variablen, die innerhalb eines Skripts erstellt werden, nur für die aktuelle Shell verfügbar; Kindprozesse (Unter-Shells) haben keinen Zugriff auf Werte, die gesetzt oder geändert wurden. Damit Kindprozesse die Werte sehen können, muss der export-Befehl verwendet werden.

0voto

Scott Punkte 9

Auch wenn es in der Diskussion nicht explizit erwähnt wird, ist es NICHT erforderlich, beim Starten einer Unter-Shell innerhalb von Bash export zu verwenden, da alle Variablen in den Kindprozess kopiert werden.

2 Stimmen

Bitte erklär dies, da das, was du sagst, offenbar direkt im Widerspruch zu den oben gegebenen Antworten mit Beispielen steht.

0 Stimmen

Dies ist der richtige Weg, wenn Sie nicht wollen, dass die Variablen global exportiert werden, sondern nur für den Unterprozess verfügbar sind! Vielen Dank.

0 Stimmen

@MikeLippert Was Scott mit Unter-Shell meint, sind diejenigen, die durch Prozesssubstitution $() oder ``, Unter-Shell erstellt durch Befehle in Klammern (Befehl1; Befehl2) usw. automatisch erben alle Variablen der übergeordneten Shell, auch wenn sie nicht exportiert werden. Aber Kindprozesse oder aufgerufene Skripte sehen nicht alle Shell-Variablen, es sei denn, sie sind exportiert. Dies ist einer der Hauptunterschiede und wird oft missverstanden

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X