unix 中的嵌套参数

问题描述 投票:0回答:1
export ABC=1
a="RESOLVED VALUE IS : ( \$ABC )"
echo $a

...作为输出发出:

RESOLVED VALUE IS : ( $ABC )

当我对参数“a”进行 echo/eval 或任何操作时,我想解析 ABC 参数值,并将最终解析值分配给新参数“b”。

我尝试使用:

$ b=$(eval echo $a)
-bash: eval: line 1: syntax error near unexpected token `('
-bash: eval: line 1: `echo RESOLVED VALUE IS : ($ABC)'

我也尝试过下面的双向步骤并且它有效,但正在寻找一种没有临时文件的单行解决方案。

echo $a > temp.dat
b=$(envsubst < temp.dat)

echo $b

相比之下正确的是

RESOLVED VALUE IS : (1)
unix parameter-passing
1个回答
0
投票

不这样做的原因有很多,但对于使用 eval 的原始机制,您可以这样做:

$ a="RESOLVED VALUE IS : ( \$ABC )"
$ ABC=foo
$ eval "b=\"$a\""
$ echo "$b"
RESOLVED VALUE IS : ( foo )
$ ABC=bar
$ eval "b=\"$a\""
$ echo "$b"
RESOLVED VALUE IS : ( bar )

eval 只是评估一个字符串,而你想要评估的字符串是赋值

b="$a"
,所以你只需将该字符串作为参数传递给
eval

© www.soinside.com 2019 - 2024. All rights reserved.