Pokud běžím
export TEST=foo
echo $TEST
Výstupem je foo.
Pokud běžím
TEST=foo echo $TEST
To není. Jak mohu získat tuto funkci bez použití exportu nebo skriptu?
Přijatá odpověď:
Je to proto, že shell rozbalí proměnnou v příkazovém řádku před skutečně spustí příkaz a v té době proměnná neexistuje. Pokud použijete
TEST=foo; echo $TEST
bude to fungovat.
export
způsobí, že se proměnná objeví v prostředí následně prováděných příkazů (jak to funguje v bash viz help export
). Pokud potřebujete, aby se proměnná objevila pouze v prostředí jednoho příkazu, použijte to, co jste vyzkoušeli, tj.:
TEST=foo your-application
Syntaxe shellu to popisuje jako funkční ekvivalentní:
export TEST=foo
your-application
unset TEST
Podrobnosti naleznete ve specifikaci.
Zajímavostí je, že export
přepne příznak exportu pro proměnnou name . Pokud to tedy uděláte:
unset TEST
export TEST
TEST="foo"
TEST
bude exportován, i když nebyl definován v době, kdy byl exportován. Dále však unset
by z něj měl odstranit atribut export.