Jaka jest różnica między set
, env
, declare
a export
gdy ustawienie zmiennej w Linux powłoki, takie jak bash
?
Jaka jest różnica między set
, env
, declare
a export
gdy ustawienie zmiennej w Linux powłoki, takie jak bash
?
Odpowiedzi:
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 ~#
declare
i set
i env
? eksportować czy deklarować?
Po pierwsze, musisz to zrozumieć environment variables
i shell variables
to 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.
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 -i
flagąset
: bez opcji, nazwa i wartość każdej zmiennej powłoki są wyświetlane * ~ od uruchomienia man set
w rhel; może być również użyty do ustawienia atrybutu powłoki . To polecenie NIE ustawia zmiennej środowiskowej ani powłoki .declare
: bez żadnych opcji, taki sam jak env
; może być również użyty do ustawienia zmiennej powłokiexport
: tworzy zmienne środowiskowe zmiennych powłokiW skrócie:
set
nie ustawia zmiennych powłoki ani środowiskaenv
może ustawić zmienne środowiskowe dla pojedynczego poleceniadeclare
ustawia zmienne powłokiexport
tworzy zmienne środowiskowe zmienne powłokiUWAGA
declare -x VAR=VAL
tworzy zmienną powłoki, a także eksportuje ją, czyniąc ją zmienną środowiskową.