Przeczytałem tutaj, że celem export
powłoki jest udostępnienie zmiennej podprocesom uruchamianym z powłoki.
Jednak przeczytałem tu i tutaj, że „Procesy dziedziczą swoje środowisko po rodzicach (proces, który je rozpoczął)”.
Jeśli tak jest, dlaczego potrzebujemy export
? czego mi brakuje?
Czy zmienne powłoki nie są domyślnie częścią środowiska? Jaka jest różnica?
set -k
jest taki, że można użyćcmd ENVVAR=value
zamiastENVVAR=value cmd
, który nie będzie działał w twoim przykładzie, chyba żeset -k
został uruchomiony przed wywołaniemf
. Ponadto niewiele powłok obsługuje go obecnie i tylko dla kompatybilności wstecznej z powłoką Bourne'a. W powłoce Bourne'a (lub Korna) nie działałoby to dla funkcji. A ponieważ wpływa na parsowanie powłoki, musi obowiązywać w momencie, gdy powłoka odczytuje kod, który z niej korzysta.