Как заставить команду UNIX «set» выводить только переменные среды

Как заставить команду UNIX «set» выводить только переменные среды

Я привык к тому, что 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.

Связанный контент