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ę.
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ę.
Odpowiedzi:
export
propaguje zmienną do podprocesów.
Na przykład, jeśli tak
FOO=bar
wtedy podproces sprawdzający FOO nie znalazłby zmiennej, podczas gdy
export FOO=bar
pozwoli podprocesowi go znaleźć.
Ale jeśli FOO
został już zdefiniowany jako zmienna środowiskowa, wówczas FOO=bar
zmodyfikuje wartość tej zmiennej środowiskowej.
Na przykład:
FOO=one # Not an environment variable
export FOO # Now FOO is an environment variable
FOO=two # Update the environment variable, so sub processes will see $FOO = "two"
Starsze powłoki nie obsługiwały export FOO=bar
składni; musiałeś pisać FOO=bar; export FOO
.
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.
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 -
#!/bin/ksh
FOO=bar
W wierszu polecenia uruchom to
> . a.ksh
Spowoduje to uruchomienie poleceń w tej samej powłoce, a $ FOO będzie dostępny.
Natomiast,
> a.ksh
Udostępni $ FOO tylko w obrębie a.ksh, po wywołaniu do a.ksh nie będzie istniał.