UNIX, получить переменную среды

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

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

echo ${VAR}

Предположим, что из-за моего нелепого положения это невозможно.

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

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

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

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


person Mike    schedule 19.03.2010    source источник
comment
Майк, ты в порядке? Вас держит мафия с пистолетом у головы на каком-то складе? Это просьба о помощи?   -  person Tim Post♦    schedule 19.03.2010
comment
В чем проблема ? Клавиатура, где '{' невидима/недоступна?   -  person Frédéric Grosshans    schedule 19.03.2010
comment
@ Тим .. моя ситуация была почти такой же плохой. Но теперь я в порядке   -  person Mike    schedule 19.03.2010
comment
короткий ответ, экстренное исправление ошибок на работе. практика в этом месте ужасна (преуменьшение года). цель состояла в том, чтобы гарантировать, что пользователь не увидит пароль, который должен был быть скрыт. предыдущий разработчик настроил дизайн так, чтобы он передавал приложению простой текстовый пароль через стандартный ввод. я заболеваю, просто думая об этом. в любом случае, я смог воспользоваться предложением skwllsps. ужасное решение ужасной проблемы, приводящее к тому, что ужасная компания делает ужасное программное обеспечение.   -  person Mike    schedule 19.03.2010
comment
Еще одна ситуация, когда это полезно: в Windows переменные среды могут содержать круглые скобки, и вы не можете сделать например, echo ${ProgramFiles(x86)}, потому что оболочка попытается выполнить подстановку. Однако printenv 'ProgramFiles(x86)' работает.   -  person sam hocevar    schedule 30.01.2019


Ответы (7)


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

printenv VARIABLE_NAME

person Community    schedule 19.03.2010
comment
О, что-то из /usr/ucb. Впечатляющий. - person pra; 20.03.2010

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

printenv

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

Эхо $VARIABLENAME

person ASR    schedule 01.08.2014

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

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

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

person mouviciel    schedule 19.03.2010
comment
Я бы больше цитировал себя: ENV() { printf 'printf "%%s\\n" "${%s}"\n' "$1" | sh; } - person glenn jackman; 19.03.2010

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

> FOO=BAR123
> VAR_NAME=FOO
> echo ${VAR_NAME}
FOO
> echo ${!VAR_NAME}
BAR123
person Ryan Anguiano    schedule 26.03.2018

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

myVariable=$(env  | grep VARIABLE_NAME | grep -oe '[^=]*$');
person jens_profile    schedule 19.03.2010
comment
на самом деле вам, вероятно, лучше использовать cut в конце, например. ... | вырезать -d '=' -f2- - person jens_profile; 19.03.2010

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

bash -c 'echo $VAR'
person sth    schedule 19.03.2010

( set -o posix ; set ) | grep $var

поиск всех unix-совместимых переменных формата был использован

person user3061097    schedule 13.02.2018
comment
В StackOverflow не рекомендуется отвечать только на код. Пожалуйста, попробуйте немного уточнить, почему это правильный ответ - person Mittal Patel; 13.02.2018
comment
Всегда не забывайте добавлять объяснение к ответу, который вы публикуете, чтобы пользователи могли понять его использование. @user3061097 - person LuFFy; 13.02.2018