Wenn ich renne
export TEST=foo
echo $TEST
Es gibt foo.
ausWenn ich renne
TEST=foo echo $TEST
Es tut nicht. Wie kann ich diese Funktionalität erhalten, ohne den Export oder ein Skript zu verwenden?
Akzeptierte Antwort:
Dies liegt daran, dass die Shell die Variable in der Befehlszeile vorher erweitert es führt den Befehl tatsächlich aus und zu diesem Zeitpunkt existiert die Variable nicht. Wenn Sie
verwendenTEST=foo; echo $TEST
es wird funktionieren.
export
lässt die Variable in der Umgebung von nachfolgend ausgeführten Befehlen erscheinen (wie dies in der Bash funktioniert, siehe help export
). ). Wenn die Variable nur in der Umgebung eines Befehls erscheinen soll, verwenden Sie das, was Sie versucht haben, d. h.:
TEST=foo your-application
Die Shell-Syntax beschreibt dies als funktional Äquivalent zu:
export TEST=foo
your-application
unset TEST
Einzelheiten finden Sie in der Spezifikation.
Interessant ist, dass der export
Der Befehl schaltet das Export-Flag für die Variable name um . Wenn Sie also Folgendes tun:
unset TEST
export TEST
TEST="foo"
TEST
exportiert, obwohl es zum Zeitpunkt des Exports nicht definiert war. Jedoch weiter unset
sollte das export-Attribut daraus entfernen.