【问题标题】:print value of environment variable from a file从文件中打印环境变量的值
【发布时间】:2015-10-19 05:05:12
【问题描述】:

问题描述

在我的 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

似乎没有任何效果。

谢谢

【问题讨论】:

  • 一个更短/更简单的选择可能是使用 eval:varname=A; eval "echo \$$varname"
  • @Wolph 不过不一样。这会找到未导出的变量。
  • @EtanReisner:是的,它不一样。不过对于这种情况可能就足够了:)
  • 您的awk 命令表明您混淆了NR(记录/行号)和NF(字段号)。

标签: shell scripting ksh


【解决方案1】:

你可以使用xargs:

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

地点:

cat envfile
$(LANG)
$LINES
USER
HISTFILESIZE

【讨论】:

  • 我已经在ksh 上测试过了。你能展示file的样本吗?
  • 无用的cat:xargs printenv < envfile
【解决方案2】:

如果您在envprintenv 的输出中寻找名为A变量,那么使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 2018-12-05
    • 2021-02-16
    • 1970-01-01
    相关资源
    最近更新 更多