2

Я привык к команде bash set перечислять только список настроек среды, например. ПУТЬ и тому подобное.

Тем не менее, в системе Ubuntu, которую я только что настроил, выполнил set dumps из 2000 строк текста, включая множество таких функций:

dequote () 
{ 
    eval printf %s "$1" 2> /dev/null
}

Как распечатать только переменные среды?

2 ответа2

3

По умолчанию set показывает переменные оболочки, а не только переменные окружения. В bash функции считаются частью переменных. См. Https://askubuntu.com/questions/26318/environment-variable-vs-shell-variable-whats-the-difference .

Если вы используете env или printenv они покажут среду, экспортированную в дочерние процессы, которая не обязательно совпадает с вашей средой bash :

$ foo=1
$ printenv foo
$ export foo
$ printenv foo
1

Баш 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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .