Jaka jest różnica pomiędzy:
a=b
i
export a=b
W bash?
Rozumiem, że oba definiują zmienne środowiskowe, ale nie do końca rozumiem różnicę.
bash
shell
process
environment-variables
Adam Matan
źródło
źródło
Odpowiedzi:
export
propaguje zmienną do podprocesów.Na przykład, jeśli tak
wtedy podproces sprawdzający FOO nie znalazłby zmiennej, podczas gdy
pozwoli podprocesowi go znaleźć.
Ale jeśli
FOO
został już zdefiniowany jako zmienna środowiskowa, wówczasFOO=bar
zmodyfikuje wartość tej zmiennej środowiskowej.Na przykład:
Starsze powłoki nie obsługiwały
export FOO=bar
składni; musiałeś pisaćFOO=bar; export FOO
.źródło
export
”, nie definiujesz zmiennej środowiskowej, a jedynie zmienną powłoki. Zmienne powłoki są dostępne tylko dla procesu powłoki; zmienne środowiskowe są dostępne dla każdego kolejnego procesu, nie tylko dla powłok. Ponadto podpowłoki są poleceniami zawartymi w nawiasach, które mają dostęp do zmiennych powłoki, podczas gdy mówisz o procesach potomnych, które są przypadkowo powłokami.Jeśli nie używasz
export
, nie definiujesz zmiennej środowiskowej; tylko zmienna powłoki.Zmienne powłoki są dostępne tylko dla procesu powłoki; zmienne środowiskowe są dostępne dla każdego kolejnego procesu, nie tylko dla powłok.
źródło
Ponadto, jeśli chcesz mieć zmienną dostępną dla powłoki wywołującej bez użycia eksportu, możesz to zrobić:
Plik a.ksh to -
W wierszu polecenia uruchom to
Spowoduje to uruchomienie poleceń w tej samej powłoce, a $ FOO będzie dostępny.
Natomiast,
Udostępni $ FOO tylko w obrębie a.ksh, po wywołaniu do a.ksh nie będzie istniał.
źródło
Oprócz tego, na co już udzielono odpowiedzi, obie te instrukcje niekoniecznie definiują (tj. Twórz vs ustaw) zmienną środowiskową, ponieważ „a” może już istnieć jako powłoka lub zmienna środowiskowa.
W drugim przypadku oba stwierdzenia są ściśle równoważne.
źródło