我正在阅读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
答案 0 :(得分:4)
问题在于$var
中randomPath="/path/$var/here/"
已经被替换,并且因为它是空白的,randomPath
设置为/path//here
。您希望使用单引号来防止早期替换:
randomPath='/path/$var/here/'
第二个问题是eval x
作为命令运行x
。你想要做的是将新评估的变量作为字符串返回:
eval echo $randomPath
您可以通常的方式将其存储在变量中:
randomPath=`eval echo $randomPath`