O ile wiem, przypisanie zmiennych jest takie samo, niezależnie od tego, czy jest poprzedzone "eksportem", czy nie. Po co to jest?Co robi "eksportowanie" w programowaniu powłoki?
Odpowiedz
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.
czyni to zadanie widocznym dla podprocesów.
[email protected]:~/rentacoder/bin2txt$ foo=bar
[email protected]:~/rentacoder/bin2txt$ bash -c 'echo $foo'
[email protected]:~/rentacoder/bin2txt$ export foo
[email protected]:~/rentacoder/bin2txt$ bash -c 'echo $foo'
bar
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 naword
.
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
.
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.
Proces dziecka nie może zmienić wartości dla rodzica. –
- 1. [: Nieoczekiwany operator w programowaniu powłoki
- 2. Co robi "uruchamianie/zatrzymywanie powłoki adb"?
- 3. drukuj podwójne cytaty w programowaniu powłoki
- 4. Jak wykonać polecenie powłoki w programowaniu jądra?
- 5. Eksportowanie zmiennych między skryptem powłoki
- 6. Co oznacza "pakowanie" w programowaniu?
- 7. Co robi -n, jeśli [-n "$ {TEMP_FILE_LIST}"] robi?
- 8. Co oznacza eksportowanie symbolu?
- 9. Eksportowanie zmiennych środowiskowych do powłoki Makefile
- 10. Co oznacza termin "blokowanie" w programowaniu?
- 11. Co SOMAXCONN oznacza w programowaniu gniazd C?
- 12. Co to są urządzenia w programowaniu?
- 13. Co robi * w CSS?
- 14. Co robi% w JavaScript?
- 15. Co oznacza $ @ w skrypcie powłoki?
- 16. Co oznacza "$$" w skrypcie powłoki?
- 17. Co Boxen i co robi?
- 18. Co robi znak @ w jQuery?
- 19. Co robi \ 1 w sed?
- 20. Co robi Collections.unmodifiableSet() w Javie?
- 21. Co robi symbol "@" w Powershell?
- 22. Co robi session_destroy() w PHP?
- 23. Co robi? zrobić w Elixir
- 24. Co robi `` ... znaczy w idź
- 25. Co robi rebaseall w Cygwin?
- 26. Co robi "^: static" w Clojure?
- 27. Co [[]] * 2 robi w pythonie?
- 28. Co robi config.gem (w environment.rb)?
- 29. Co {} robi w ciągu znaków?
- 30. Co robi dodatkowy przycisk "$()" w "$ ($())"?
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