问题说明
在我的Unix ksh系统中,我在做
时有一个环境变量A. echo ${A}
我得到了所需的值hello
。
我可以在
中查看此值 env | grep ${A}
输出:A=hello
或
printenv | grep ${A}
输出:A=hello
现在我有一个文件file
,其中包含环境变量列表,我必须获取相应的值。
现在我只尝试了文件的第一个值。
env | grep $(cat file | awk 'NR==1{print $1}')
- 什么都不显示
b=$(cat file | awk 'NR==1{print $1}')
env | grep echo $b
b=cat TEMP_ES_HOST_MAP | awk -F"|" 'NR==1{print $2 }'
echo $b
c=
eval $ b
c = echo $b
似乎没有任何效果。
谢谢
答案 0 :(得分:3)
您可以使用xargs
:
awk -F '[$()]+' '{print $1$2}' envfile | xargs printenv
其中:
cat envfile
$(LANG)
$LINES
USER
HISTFILESIZE
答案 1 :(得分:3)
如果您要在A
和env
的输出中查找名为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