似乎建议在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在(with ${!foo})中包含了间接变量引用,但是我看不到任何这样的方法来进行间接赋值-是否有理智的方法来做到这一点?
作为记录,我确实找到了解决方案,但这并不是我认为的“理智” ...:
eval "$var='"${val//\'/\'\"\'\"\'}"'"
慕尼黑5688855
慕容森
慕姐8265434