从文件中打印环境变量的值

时间:2015-07-28 14:46:24

标签: shell scripting ksh

问题说明

在我的Unix ksh系统中,我在做

时有一个环境变量A.

echo ${A}

我得到了所需的值hello

我可以在

中查看此值

env | grep ${A}

输出:A=hello

printenv | grep ${A}

输出:A=hello

现在我有一个文件file,其中包含环境变量列表,我必须获取相应的值。

现在我只尝试了文件的第一个值。

  1. env | grep $(cat file | awk 'NR==1{print $1}') - 什么都不显示

  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 c = echo $b

  4. 似乎没有任何效果。

    谢谢

2 个答案:

答案 0 :(得分:3)

您可以使用xargs

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

其中:

cat envfile
$(LANG)
$LINES
USER
HISTFILESIZE

答案 1 :(得分:3)

如果您要在Aenv的输出中查找名为printenv变量,那么使用grep ${A}是不正确的(并且不安全/不适用于多个单词的变量。)

你想要的是:

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 -

实际上这应该也可以工作,甚至更简单(假设使用ENVIRON的awk):

awk '$1 in ENVIRON {print $1"="ENVIRON[$1]}' varfile