似乎在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//\'/\'\"\'\"\'}"'"