2015-07-28 3 views
1

Описание проблемыпечать значение переменной окружения из файла

В моей системе КШ Unix, я имею переменную среды делать

echo ${A}

Я получаю желаемое значение, есть hello.

можно проверить это значение в

env | grep ${A}

выход: A=hello

или в

printenv | grep ${A}

выход: A=hello

Теперь у меня есть файл file, который содержит список переменных окружения, и мне нужно получить соответствующее значение.

Теперь я попробовал только для первого значения файла.

  1. env | grep $(cat file | awk 'NR==1{print $1}') не --shows НИЧТО

  2. b=$(cat file | awk 'NR==1{print $1}')

    env | grep echo $b

  3. b=cat TEMP_ES_HOST_MAP | awk -F"|" 'NR==1{print $2 }' echo $b c= Eval $ B с = echo $b

Ничто не работает.

Спасибо

+0

Более короткий/простой вариант может быть использовано eval: 'varname = A; eval "echo \ $$ varname" ' – Wolph

+0

@Wolph Не то же самое. Это находит переменные, которые также не экспортируются. –

+0

Связанный вопрос: http://unix.stackexchange.com/questions/41406/use-a-variable-reference-inside-another-variable – Wolph

ответ

3

Вы можете использовать xargs:

awk -F '[$()]+' '{print $1$2}' envfile | xargs printenv 

Где:

cat envfile 
$(LANG) 
$LINES 
USER 
HISTFILESIZE 
+0

Спасибо за ответ, но это не работает :( – avinashse

+0

Я тестировал это на 'ksh'. Можете ли вы показать образец файла? – anubhava

+1

Бесполезный использование 'cat':' xargs printenv chepner

3

Если вы ищете переменной имени A на выходе из env и printenv затем использование grep ${A} неверно (и небезопасно/d oes не работают для переменных более одного слова).

То, что вы хотите, потому что это:

env | grep ^A= 
printenv | grep ^A= 

Так предполагается, что ваш файл выглядит следующим образом:

VAR1 
VAR2 
OTHER_VAR 

и вы хотите найти те, которые вы могли бы использовать что-то вроде этого (если у вас есть замена процесса):

env | grep -f <(awk '{print "^"$0"="}' varfile) 

Предполагая, что у вас нет замены процесса (или Вы предпочли бы более простое решение, я), вы можете сделать это:

env | awk -F = 'NR==FNR{a[$1]++; next} $1 in a' varfile - 

На самом деле это должно работать также и даже проще (предполагая AWK с ENVIRON):

awk '$1 in ENVIRON {print $1"="ENVIRON[$1]}' varfile 
Смежные вопросы