В чем разница между env, declare и compgen -v?

Я вижу, что printenv и env дают тот же результат. Когда вы копаете дальше для получения полного списка переменных среды, я нашел declare -xp и команду отсюда:

compgen -v | while read line; do echo $line=${!line};done

В чем разница между этими командами с точки зрения переменных среды.

3
задан 7 September 2017 в 14:30

3 ответа

Команда env может запускать другие команды с измененными средами. Если команда не указана, env печатает переменные среды (т. Е. Экспортированные переменные). printenv может печатать только переменные среды (они не могут запускать команды). См. Этот вопрос U & amp; L для большего различия между ними.

этот U & amp; L question выводит только экспортированный из всех переменных оболочки, экспортированных или нет , Вот почему вам нужно использовать переменную косвенность (${!line}), чтобы получить значение переменной. compgen -v обычно используется для завершения табуляции.

declare -p печатает детали переменных оболочки повторно используемым образом, как правило, в виде более declare команд. Параметр -x ограничивает вывод экспортируемых переменных. Выход declare может быть позже eval 'd, чтобы вернуть заданное состояние переменных.

set может использоваться для установки различных параметров оболочки или позиционных параметров. Если аргументы или параметры не заданы, он печатает все переменные и функции оболочки.

export может использоваться для экспорта переменных или функций. С параметром -p он печатает экспортированные переменные и функции.

4
ответ дан 22 May 2018 в 18:42
  • 1
    Спасибо за ответ. Кстати, можете ли вы упомянуть что-то о команде «set»? – surendra nath 7 September 2017 в 15:01

Команда env может запускать другие команды с измененными средами. Если команда не указана, env печатает переменные среды (т. Е. Экспортированные переменные). printenv может печатать только переменные среды (они не могут запускать команды). См. Этот вопрос U & amp; L для большего различия между ними.

этот U & amp; L question выводит только экспортированный из всех переменных оболочки, экспортированных или нет , Вот почему вам нужно использовать переменную косвенность (${!line}), чтобы получить значение переменной. compgen -v обычно используется для завершения табуляции.

declare -p печатает детали переменных оболочки повторно используемым образом, как правило, в виде более declare команд. Параметр -x ограничивает вывод экспортируемых переменных. Выход declare может быть позже eval 'd, чтобы вернуть заданное состояние переменных.

set может использоваться для установки различных параметров оболочки или позиционных параметров. Если аргументы или параметры не заданы, он печатает все переменные и функции оболочки.

export может использоваться для экспорта переменных или функций. С параметром -p он печатает экспортированные переменные и функции.

4
ответ дан 18 July 2018 в 07:16

Команда env может запускать другие команды с измененными средами. Если команда не указана, env печатает переменные среды (т. Е. Экспортированные переменные). printenv может печатать только переменные среды (они не могут запускать команды). См. Этот вопрос U & amp; L для большего различия между ними.

этот U & amp; L question выводит только экспортированный из всех переменных оболочки, экспортированных или нет , Вот почему вам нужно использовать переменную косвенность (${!line}), чтобы получить значение переменной. compgen -v обычно используется для завершения табуляции.

declare -p печатает детали переменных оболочки повторно используемым образом, как правило, в виде более declare команд. Параметр -x ограничивает вывод экспортируемых переменных. Выход declare может быть позже eval 'd, чтобы вернуть заданное состояние переменных.

set может использоваться для установки различных параметров оболочки или позиционных параметров. Если аргументы или параметры не заданы, он печатает все переменные и функции оболочки.

export может использоваться для экспорта переменных или функций. С параметром -p он печатает экспортированные переменные и функции.

4
ответ дан 24 July 2018 в 18:46

Другие вопросы по тегам:

Похожие вопросы: