Я привык к тому, что set
команда bash выводит только список настроек среды, например, PATH и т. п.
Однако в системе Ubuntu, которую я только что настроил, выполняется set
дамп из 2000 строк текста, включая множество функций, подобных этой:
dequote ()
{
eval printf %s "$1" 2> /dev/null
}
Как распечатать только переменные среды?
решение1
По умолчанию set
показываетпеременные оболочки, а не только переменные окружения. В bash
функциях считаются частью переменных. Смотритеhttps://askubuntu.com/questions/26318/переменная-окружения-против-переменной-оболочки-какая-разница-.
Если вы используете env
или printenv
они покажутсредаэкспортируется в дочерние процессы, что не являетсяобязательното же самое, что и ваша bash
среда:
$ foo=1
$ printenv foo
$ export foo
$ printenv foo
1
Bash declare
и typeset
встроенные функции могут перечислять все типы переменных, исключая функции:
declare -F
Вывод этих команд находится в форме, подходящей для воссоздания состояния в скрипте оболочки, поэтому он немного многословен, хотя вы можете различать массивы, целые числа и другие типы (в зависимости от версии). См. также вывод export -p
.
И изhttps://stackoverflow.com/questions/1305237/how-to-list-variables-declared-in-script-in-bash
вы можете указать bash использовать режим POSIX, и set
он будет вести себя «правильно»:
( set -o posix ; set )
Он запускается в подоболочке, поэтому не изменяет работающую оболочку и правильно выбирает переменные, которые еще не экспортированы в унаследованную среду.
решение2
Если вы хотите вывести список всех переменных среды, просто введите env
.