В чем разница между set, env, объявлять и экспортировать при установке переменной в оболочке Linux?


17

В чем разница между set, env, declareи exportпри установке переменной в Linux оболочки, такие как bash?


1
Почему этот вопрос был отклонен?
10

Ответы:


5

Кажется, что набор и объявление немного отличаются, причем набор более мощный.

См. «Объявить» в разделе 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? экспорт против объявить?
Pacerier

Я должен понизить это, потому что это просто не отвечает на вопрос.
Даниэль С. Собрал,

Дайте мне знать, если это немного лучше.
Шон П.

1

Во-первых, вы должны понимать это environment variablesи shell variablesне одно и то же.

Затем вы должны знать, что оболочки имеют атрибуты, которые определяют, как это работает. Эти атрибуты не являются ни средой, ни переменными оболочки.

Теперь перейдем к ответу на ваш вопрос.

  1. env: без параметров показывает текущие переменные среды с их значениями; Однако может использоваться для установки переменной среды для одной команды с -iфлагом
  2. set: без опций имя и значение каждой переменной оболочки отображаются * ~ после запуска man setв rhel; также может быть использован для установки атрибута оболочки . Эта команда НЕ устанавливает окружение или переменную оболочки .
  3. declare: без каких-либо опций, так же, как env; также может использоваться для установки переменной оболочки
  4. export: делает переменные оболочки переменными среды

Короче говоря:

  1. set не устанавливает ни shell, ни переменные окружения
  2. env можно установить переменные среды для одной команды
  3. declare устанавливает переменные оболочки
  4. export делает переменные оболочки переменными среды

NOTE declare -x VAR=VAL создает переменную оболочки, а также экспортирует ее, делая ее переменной среды.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.