Ich habe hier gelesen , dass der Zweck von export
in einer Shell ist, die Variable für Unterprozesse verfügbar zu machen, die von der Shell aus gestartet wurden.
Ich habe jedoch auch hier und hier gelesen , dass "Prozesse ihre Umgebung von ihren Eltern erben (dem Prozess, der sie gestartet hat)".
Wenn dies der Fall ist, warum brauchen wir export
? Was vermisse ich?
Sind Shell-Variablen standardmäßig nicht Teil der Umgebung? Was ist der Unterschied?
set -k
ist so, dass mancmd ENVVAR=value
anstelle von verwenden kannENVVAR=value cmd
, dass es in Ihrem Beispiel nur funktioniert, wennset -k
es vor dem Aufrufen ausgeführt wurdef
. Außerdem wird es heutzutage nicht mehr von vielen Shells unterstützt und nur aus Gründen der Abwärtskompatibilität mit der Bourne-Shell. In der Bourne- (oder Korn-) Shell würde das für Funktionen nicht funktionieren. Und da es die Shell-Analyse beeinflusst, muss es zu dem Zeitpunkt in Kraft sein, an dem die Shell den Code liest , der ihn dort verwendet.