我有一个文本文件
hg.ini
,其中包含可以解释为 bash 变量赋值的行:
$ cat hg.ini
[hello goodbye]
x=hello.world
y=goodbye.cruel.cruel.world
z=I.dont.know.why.you.say.goodbye.I.say.hello
我想处理该文件以执行 bash 命令,以这种方式设置 bash 变量:
x=hello.world echo $x
hello.world
我尝试了以下方法,但是
$()
习惯用法被解释为命令而不是变量赋值:
$(grep x= hg.ini|tr -d '\r\n') echo $x
x=hello.world: command not found
我可以用什么来代替?
您可以像这样获取
grep
结果:
$ typeset -p x
-bash: typeset: x: not found
$ source <(grep 'x=' hg.ini)
$ typeset -p x
declare -- x="hello.world"
正如评论中所指出的,您需要执行分配和后续操作
echo
作为单独的命令:
$ source <(grep 'x=' hg.ini); echo "$x"
hello.world
使用
eval
执行文件中的分配。
eval "$(grep '^x=' hg.ini)"