В чем разница между set
, env
, declare
и export
при установке переменной в Linux оболочки, такие как bash
?
В чем разница между set
, env
, declare
и export
при установке переменной в Linux оболочки, такие как bash
?
Ответы:
Кажется, что набор и объявление немного отличаются, причем набор более мощный.
См. «Объявить» в разделе https://www.gnu.org/software/bash/manual/bash.html#Bash-Builtins Declare: «Объявить переменные и дать им атрибуты. Если имена не заданы, отобразить значения переменных вместо.
Установите «set» в https://www.gnu.org/software/bash/manual/bash.html#The-Set-Builtin * set: «Это встроено настолько сложно, что оно заслуживает отдельного раздела. Set позволяет вам изменить значения параметров оболочки и установить позиционные параметры или отобразить имена и значения переменных оболочки. "
ENV - это переменная окружения в Bash: https://www.gnu.org/software/bash/manual/bash.html#Bash-Variables env - это команда Linux. Я думаю, что это хорошая ссылка: /unix/103467/what-is-env-command-doing
Я думал, что это хорошее объяснение экспорта: http://www.unix.com/302531838-post2.html
Также: https://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins * export (from Bourne): «Отметьте каждое имя, которое будет передано дочерним процессам в среде».
Заимствование кода из 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
а set
а env
? экспорт против объявить?
Во-первых, вы должны понимать это environment variables
и shell variables
не одно и то же.
Затем вы должны знать, что оболочки имеют атрибуты, которые определяют, как это работает. Эти атрибуты не являются ни средой, ни переменными оболочки.
Теперь перейдем к ответу на ваш вопрос.
env
: без параметров показывает текущие переменные среды с их значениями; Однако может использоваться для установки переменной среды для одной команды с -i
флагомset
: без опций имя и значение каждой переменной оболочки отображаются * ~ после запуска man set
в rhel; также может быть использован для установки атрибута оболочки . Эта команда НЕ устанавливает окружение или переменную оболочки .declare
: без каких-либо опций, так же, как env
; также может использоваться для установки переменной оболочкиexport
: делает переменные оболочки переменными средыКороче говоря:
set
не устанавливает ни shell, ни переменные окруженияenv
можно установить переменные среды для одной командыdeclare
устанавливает переменные оболочкиexport
делает переменные оболочки переменными средыNOTE
declare -x VAR=VAL
создает переменную оболочки, а также экспортирует ее, делая ее переменной среды.