我有以下文件变量和值
# more file.txt
export worker01="sdg sdh sdi sdj sdk"
export worker02="sdg sdh sdi sdj sdm"
export worker03="sdg sdh sdi sdj sdf"
我执行 source 以读取变量
# source file.txt
例子:
echo $worker01
sdg sdh sdi sdj sdk
到现在为止,一切都是完美的
但现在我想从文件中读取变量并通过简单的 bash 循环打印值我将读取第二个字段并尝试打印变量的值
# for i in ` sed s'/=/ /g' /tmp/file.txt | awk '{print $2}' `
do
echo $i
declare var="$i"
echo $var
done
但它只打印变量而不是值
worker01
worker01
worker02
worker02
worker03
worker03
预期输出:
worker01
sdg sdh sdi sdj sdk
worker02
sdg sdh sdi sdj sdm
worker03
sdg sdh sdi sdj sdf
你有
export worker01="sdg sdh sdi sdj sdk"
,然后你=
用空格替换得到export worker01 "sdg sdh sdi sdj sdk"
。其中的空格分隔字段是export
,worker01
,"sdg
,sdh
等。拆分
=
并删除引号可能更好,因此仅使用外壳:key
包含变量名、val
值。当然,这实际上并没有解析输入,如果它们碰巧在那里,它只是删除双引号。单独使用awk :
循环它你可以:
如果您还想在循环中打印变量名称,您可以这样做:
输出:
首先,您可以使用这个 GNU grep 命令,使用 Perl 兼容的正则表达式来获取变量名称:
然后,您可以使用以下命令将其输出读入 bash 数组:
这使用 bash 内置
mapfile
命令和进程 substitition。最后,遍历变量名并使用间接参数扩展来获取值:
你可以使用这个 sed
或者这个 awk