Wofür ist export
?
Was ist der Unterschied zwischen:
export name=value
und
name=value
Wofür ist export
?
Was ist der Unterschied zwischen:
export name=value
und
name=value
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:
bash-hackers.org/wiki/doku.php/scripting/processtree
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
Hallo Will, kann ich eine Variable exportieren, bevor die Variable deklariert wird? wie exportiere OURNAME und dann OURNAME=Jim?
@leoleohu, wenn du UNSERNAME exportierst, bevor du ihn zuweist, exportierst du einfach nur einen leeren String.
@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.
Bitte erklär dies, da das, was du sagst, offenbar direkt im Widerspruch zu den oben gegebenen Antworten mit Beispielen steht.
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.
@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 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.
2 Stimmen
Siehe auch: stackoverflow.com/questions/68529921/…