Как перечислить имена всех переменных и их текущие значения?

Как перечислить имена всех переменных и их текущие значения?

В том числе не только $HOME, $PWD и т.д., но любой другой, который вы определили.

Для баша: (стандартная оболочка в Ubuntu)

Введите следующую команду в терминале, чтобы распечатать все переменные среды:

printenv

Для получения дополнительной информации об этой команде прочтите printenv справочная страница.


Чтобы отобразить список, включающий "переменные оболочки", вы можете ввести следующую команду:

( set -o posix ; set ) | less

Это покажет вам не только переменные оболочки, но и переменные среды тоже.

Для получения дополнительной информации, связанной с этой темой, читайте:


Для zsh: (усовершенствованная оболочка)

Используйте следующую команду:

( setopt posixbuiltin; set; ) | less

Для получения дополнительной информации о параметрах ZSH см. zshoptions справочная страница.

Вы можете увидеть все переменные с помощью declare встроенный.

declare -p

Если вас интересуют только переменные среды, используйте

declare -xp

Бежать help declare чтобы посмотреть, какие есть другие варианты.

Я знаю, что этот вопрос довольно старый и на него дан ответ, но я думаю, что могу добавить немного полезной информации.

Во всех описанных выше методах предлагаемая процедура заключается в:

  • запустите терминал
  • показывать переменные среды с помощью env, илиprintenv или что-то еще

Проблема этих решений заключается в том, что вы видите переменные среды оболочки, которая запускается в терминале. Вы не видите переменные среды, доступные для приложения, запускаемого, например, непосредственно графическим интерфейсом.

Это заметно, если, например, вы используете свой ~/.profile, или .bashrc, или .zshenv (в зависимости от вашей оболочки) для изменения переменных среды --- как классическое добавление каталогов к пути.

Чтобы просмотреть переменные среды, доступные приложению, запущенному непосредственно в графической среде, вы можете выполнить следующее (в Gnome Shell, я уверен, что во всех других DE есть эквивалентный метод).:

  • нажмите Alt-F2
  • запустите команду xterm -e bash --noprofile --norc

(Или, если у вас нет xterm, gnome-terminal -- bash --noprofile --norc --- спасибо @Mike Nakis за комментарий).

Теперь у вас есть терминал с оболочкой, которая не добавляла никаких переменных среды. Вы можете использовать env здесь перечислены все ваши переменные среды:

Example of the bare shell

Очевидно, что в новой оболочке будут переменные среды, добавленные системными файлами, но эти переменные в любом случае должны быть доступны (по наследству) для всех программ в системе.

Я публикую это, потому что уже в четвертый раз мне приходится снова искать этот трюк, проверяя свой .pam_environment файл. Так что теперь я найду его быстрее (и в процессе, я надеюсь, помогу кому-то еще ...)

Чтобы перечислить переменные среды в терминале с помощью CTRL+ALT+T Вы можете использовать env команда.

например :

[raja@localhost ~]$ envXDG_VTNR=1SSH_AGENT_PID=3671XDG_SESSION_ID=3HOSTNAME=localhost.localdomainIMSETTINGS_INTEGRATE_DESKTOP=yesGPG_AGENT_INFO=/home/raja/.gnupg/S.gpg-agent:3691:1GLADE_PIXMAP_PATH=:TERM=xterm-256colorSHELL=/bin/bashXDG_MENU_PREFIX=xfce-DESKTOP_STARTUP_ID=HISTSIZE=1000XDG_SESSION_COOKIE=0250277dd805498381e96c05d88068b0-1364679772.845276-1676152201WINDOWID=65011716GNOME_KEYRING_CONTROL=/home/raja/.cache/keyring-N3QoQ2IMSETTINGS_MODULE=noneQT_GRAPHICSSYSTEM_CHECKED=1USER=raja

и т.д.

надеюсь, это поможет.

В bash с использованием compgen:

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

Если вам нужна конкретная переменная среды, вместо того, чтобы печатать их все с помощью printenv, вы можете, например, распечатать его, выполнив echo "$PWD"

Большинство решений здесь либо выводят только переменные среды, либо имеют недостаток, заключающийся в том, что env или (set -o posix; set) не выводят значения в легко анализируемой форме (попробуйте вывести переменную A = $'a\ r\nb', в ней несколько строк ...).

Вот функция, которая будет печатать все переменные, по одной переменной на строку, в экранированной форме POSIX (работает правильно для простых текстовых переменных, не работает для массивов):

function dump_vars {    local VARNAME    compgen -v | while read -r VARNAME; do        printf "$VARNAME=%q\n" "${!VARNAME}"    done}

Спасибо @tmgoblin за указание на использование compgen -v.

завидую это POSIX 7 способ:

export asdf=qwerenv | grep asdf

Образец выходного сигнала:

asdf=qwer

В нем отображаются только экспортированные переменные: неэкспортированные переменные обычно не считаются "переменными среды".

Предпочитаю это, а не printenv, который не является POSIX. Оба, похоже, делают одно и то же без аргументов: https://unix.stackexchange.com/questions/123473/what-is-the-difference-between-env-and-printenv

  • printenv покажет все глобальные переменные окружения
  • env, глобальная переменная окружения после изменения входа в систему
  • set, отобразит всю локальную переменную среды относительно сеанса (обычно локальная переменная является глобальной + специфичной для сеанса)

в printenv перечислены только экспортированные переменные,command+alt+$( "\e$": полная переменная ) отобразит список всех переменных.

Вы приняли неправильный ответ. “printenv” предоставляет вам только переменные среды. Если вы действительно хотите, чтобы все переменные, объявленные в данный момент в вашей оболочке, использовали “declare -p” или “typeset -p”.