Я вижу это printenv
и env
дают тот же вывод. При рытье далее для получения полного списка переменных среды, я нашел declare -xp
и команда отсюда:
compgen -v | while read line; do echo $line=${!line};done
Что является различиями между этими командами с точки зрения переменных среды.
env
команда может выполнить другие команды с измененными средами. Если никакая команда не дана, env
переменные среды печати (т.е. экспортируемые переменные). printenv
может только распечатать переменные среды (это не может команды выполнения). Посмотрите этот вопрос U&L для большего количества различий между двумя.
compgen -v
выводы только названия всех переменных оболочки, экспортируемых или нет. Вот почему необходимо использовать переменную косвенность (${!line}
) получить значение переменной. compgen -v
обычно используется для заполнения клавишей Tab.
declare -p
детали печати переменных оболочки допускающим повторное использование способом, обычно в форме больше declare
команды. -x
опция ограничивает вывод экспортируемыми переменными. Вывод declare
может быть eval
'd позже, для возвращения данного состояния переменных.
set
может использоваться для установки различных опций оболочки или позиционных параметров. Если никакие аргументы или опции не даны, то это печатает все переменные оболочки и функции.
export
может использоваться для экспорта переменных или функций. С -p
опция, это печатает экспортируемые переменные и функции.