2011-09-14 15 views

Odpowiedz

101

Wyeksportowane zmienne (takie jak $HOME i $PATH) są dostępne dla innych programów. Zwykłe (nie eksportowane) zmienne nie są dostępne dla innych programów.

$ env | grep '^variable=' 
$         # No environment variable called variable 
$ variable=Hello     # Create local (non-exported) variable with value 
$ env | grep '^variable=' 
$         # Still no environment variable called variable 
$ export variable     # Mark variable for export to child processes 
$ env | grep '^variable=' 
variable=Hello 
$ 
$ export other_variable=Goodbye # create and initialize exported variable 
$ env | grep '^other_variable=' 
other_variable=Goodbye 
$ 

Aby uzyskać więcej informacji, zobacz wpis dla export builtin w podręczniku GNU bash.

Zauważ, że zmienne spoza eksportowane będą dostępne dla podpowłok prowadzonych przez (...) i podobnych zapisów:

$ othervar=present 
$ (echo $othervar; echo $variable; variable=elephant; echo $variable) 
present 
Hello 
elephant 
$ echo $variable 
Hello 
$ 

podpowłoki nie mogą wpływać na zmienną w powłoce macierzystej, oczywiście.

Niektóre informacje na temat podpowłok można znaleźć pod command grouping i command execution environment w podręczniku Bash.

+0

Dodałem kilka nowych linii, a także linie pokazujące '$', aby wyraźniej pokazać, że nie ma wyjścia z polecenia 'grep'. Oczywiście, wycofaj się, jeśli uważasz, że to traci czytelność. – fedorqui

12

Cóż, to na ogół zależy od powłoki. W przypadku bash oznacza zmienną jako "możliwą do eksportu", co oznacza, że ​​będzie się pojawiać w środowisku dla wszystkich uruchomionych procesów potomnych.

Zmienne nieeksportowane są widoczne tylko z bieżącego procesu (powłoka).

bash Od strony człowieka:

export [-fn] [name[=word]] ...
export -p

Dostarczone nazwy zaznaczono automatycznego eksportu do środowiska następnie wykonywanych poleceń.

Jeśli podano opcję -f, nazwy odnoszą się do funkcji. Jeśli nie podano żadnych nazw lub podano opcję -p, drukowana jest lista wszystkich nazw wyeksportowanych w tej powłoce.

Opcja -n powoduje, że właściwość eksportu jest usuwana z każdej nazwy.

Jeśli po nazwie zmiennej występuje =word, wartość zmiennej zostanie ustawiona na word.

export zwraca kod zakończenia 0, chyba że napotkano nieprawidłową opcję, jedna z nazw nie jest poprawną nazwą zmiennej powłoki lub -f dostarczany jest z nazwą, która nie jest funkcją.

Można również ustawić zmienne jak eksportowane z komendy typeset i automatycznie zaznaczyć wszystkie przyszłe projekty zmienna lub modyfikacje jako takie, z set -a.

-2

Eksportowana zmienna jest dostępna dla wszystkich procesów w hierarchii procesów. Na przykład dane eksportowane przez proces potomny są dostępne dla procesu nadrzędnego i na odwrót.

Głównym zastosowaniem eksportu jest udostępnianie danych między 2 procesami.

+1

Proces dziecka nie może zmienić wartości dla rodzica. –