【发布时间】:2012-04-13 21:11:58
【问题描述】:
似乎在bash中进行间接变量设置的推荐方法是使用eval:
var=x; val=foo
eval $var=$val
echo $x # --> foo
问题是eval 的常见问题:
var=x; val=1$'\n'pwd
eval $var=$val # bad output here
(由于在很多地方都推荐它,我想知道有多少脚本因此容易受到攻击......)
在任何情况下,使用(转义)引号的明显解决方案并不真正起作用:
var=x; val=1\"$'\n'pwd\"
eval $var=\"$val\" # fail with the above
问题是 bash 包含了间接变量引用(使用 ${!foo}),但我没有看到任何这样的方式来进行间接赋值——有没有理智的方式来做到这一点?
作为记录,我确实找到了解决方案,但这不是我认为“理智”的事情......:
eval "$var='"${val//\'/\'\"\'\"\'}"'"
【问题讨论】:
标签: bash eval variable-assignment quotes