如何使用eval强制进行变量更新

时间:2013-06-08 20:07:07

标签: shell unix eval

我正在阅读bash高级脚本编写指南(如果内存为我提供了正确的帮助),并且在某种程度上可以使用eval来强制执行变量更新。

所以我尝试了这个:

randomPath="/path/$var/here/"  # var is not defined at this point
echo $randomPath
/path//here/
var="is" # initially defining var
eval $randomPath
zsh: no such file or directory: /path//here/

我不明白错误信息,我想知道我是否正确使用eval。

我期待的输出是:

eval $randomPath
echo $randomPath
/path/is/here

1 个答案:

答案 0 :(得分:4)

问题在于$varrandomPath="/path/$var/here/"已经被替换,并且因为它是空白的,randomPath设置为/path//here。您希望使用单引号来防止早期替换:

randomPath='/path/$var/here/'

第二个问题是eval x作为命令运行x。你想要做的是将新评估的变量作为字符串返回:

eval echo $randomPath

您可以通常的方式将其存储在变量中:

randomPath=`eval echo $randomPath`