Jaka jest różnica między ustawieniem, env, deklarowaniem i eksportowaniem podczas ustawiania zmiennej w powłoce Linux?

17

Jaka jest różnica między set, env, declarea exportgdy ustawienie zmiennej w Linux powłoki, takie jak bash?

użytkownik3872279
źródło
1
Dlaczego odrzucono to pytanie?
l0b0

Odpowiedzi:

5

Wygląda na to, że zbiór i deklaracja są nieco inne, a zbiór jest silniejszy.

Zobacz „deklaruj” pod https://www.gnu.org/software/bash/manual/bash.html#Bash-Builtins deklaruj: „Deklaruj zmienne i nadaj im atrybuty. Jeśli nie podano żadnych nazw, wyświetl wartości zmiennych zamiast.

Ustaw „set” pod https://www.gnu.org/software/bash/manual/bash.html#The-Set-Builtin * set: „To wbudowane jest tak skomplikowane, że zasługuje na swoją własną sekcję. Set pozwala na zmień wartości opcji powłoki i ustaw parametry pozycyjne lub wyświetl nazwy i wartości zmiennych powłoki. "

ENV to zmienna środowiskowa w Bash: https://www.gnu.org/software/bash/manual/bash.html#Bash-Variables env jest poleceniem Linuksa. Myślę, że to dobra informacja: /unix/103467/what-is-env-command-doing

Myślałem, że to dobre wytłumaczenie eksportu: http://www.unix.com/302531838-post2.html

Ponadto: https://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins * eksport (z Bourne): „Zaznacz każdą nazwę do przekazania do procesów potomnych w środowisku”.

Pożycz kod z powyższego adresu URL:

root@linux ~# x=5                <= here variable is set without export command
root@linux ~# echo $x
5
root@linux ~# bash               <= subshell creation
root@linux ~# echo $x            <= subshell doesnt know $x variable value
root@linux ~# exit               <= exit from subshell
exit
root@linux ~# echo $x            <= parent shell still knows $x variable
5
root@linux ~# export x=5         <= specify $x variable value using export command
root@linux ~# echo $x            <= parent shell doesn't see any difference from the first declaration
5
root@linux ~# bash               <= create subshell again
root@linux ~# echo $x            <= now the subshell knows $x variable value
5
root@linux ~#
Shawn P.
źródło
declarei seti env? eksportować czy deklarować?
Pacerier
Muszę głosować za tym, ponieważ to po prostu nie odpowiada na pytanie.
Daniel C. Sobral,
Daj mi znać, jeśli jest to lepsze.
Shawn P.
1

Po pierwsze, musisz to zrozumieć environment variablesi shell variablesto nie to samo.

Następnie powinieneś wiedzieć, że powłoki mają atrybuty, które regulują ich działanie. Te atrybuty nie są zmiennymi środowiskowymi ani powłoki.

Teraz przejdźmy do odpowiedzi na twoje pytanie.

  1. env: bez opcji pokazuje bieżące zmienne środowiskowe wraz z ich wartościami; Można go jednak użyć do ustawienia zmiennej środowiskowej dla pojedynczego polecenia z -iflagą
  2. set: bez opcji, nazwa i wartość każdej zmiennej powłoki są wyświetlane * ~ od uruchomienia man setw rhel; może być również użyty do ustawienia atrybutu powłoki . To polecenie NIE ustawia zmiennej środowiskowej ani powłoki .
  3. declare: bez żadnych opcji, taki sam jak env; może być również użyty do ustawienia zmiennej powłoki
  4. export: tworzy zmienne środowiskowe zmiennych powłoki

W skrócie:

  1. set nie ustawia zmiennych powłoki ani środowiska
  2. env może ustawić zmienne środowiskowe dla pojedynczego polecenia
  3. declare ustawia zmienne powłoki
  4. export tworzy zmienne środowiskowe zmienne powłoki

UWAGA declare -x VAR=VAL tworzy zmienną powłoki, a także eksportuje ją, czyniąc ją zmienną środowiskową.

Tran Triet
źródło