UNIX, получить переменную среды - PullRequest
37 голосов
/ 19 марта 2010

У меня нелепый вопрос из-за нелепой проблемы.

Обычно, если я хочу получить содержимое переменной среды в оболочке UNIX, я могу сделать

echo ${VAR}

Предположим, из-за моей нелепой ситуации, что это невозможно.

Как получить содержимое переменной среды в стандартный вывод, чтобы кто-то, кто просматривает саму команду (не вывод), мог видеть значение переменной среды.

Я могу представить себе решение, похожее на echo env(NAME_OF_VAR), хотя, похоже, я не могу его найти. Решение должно работать в ш.

PS Я не могу написать скрипт для этого, это должна быть встроенная команда Unix (я знаю, смешная проблема)

Спасибо (и извините за абсурд)

Ответы [ 7 ]

57 голосов
/ 19 марта 2010

Вы можете сделать:

printenv VARIABLE_NAME

6 голосов
/ 01 августа 2014

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

printenv

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

echo $ VARIABLENAME

4 голосов
/ 19 марта 2010

Вы имеете в виду что-то вроде этого:

ENV() {
    printf 'echo $%s\n' $1 | sh
}

Это работает в простой старой оболочке Bourne.

3 голосов
/ 26 марта 2018

Использование ${!VAR_NAME} должно быть то, что вы ищете

> FOO=BAR123
> VAR_NAME=FOO
> echo ${VAR_NAME}
FOO
> echo ${!VAR_NAME}
BAR123
3 голосов
/ 19 марта 2010

Как насчет этого:

myVariable=$(env  | grep VARIABLE_NAME | grep -oe '[^=]*$');
1 голос
/ 19 марта 2010

Решение действительно зависит от ограничений, почему вы не можете использовать простое $VAR. Возможно, вы могли бы вызвать оболочку, которая не имеет ограничений, и позволить этой вложенной оболочке оценить переменную:

bash -c 'echo $VAR'
0 голосов
/ 13 февраля 2018
( set -o posix ; set ) | grep $var

поиск всех переменных формата, совместимых с Unix

...