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)
不这样做的原因有很多,但对于使用 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
。