似乎在bash中建议的间接变量设置方法是使用eval
:
var=x; val=foo
eval $var=$val
echo $x # --> foo
Run Code Online (Sandbox Code Playgroud)
问题是通常的问题eval
:
var=x; val=1$'\n'pwd
eval $var=$val # bad output here
Run Code Online (Sandbox Code Playgroud)
(并且因为在很多地方推荐,我想知道有多少脚本因此而易受攻击...)
在任何情况下,使用(转义)引号的明显解决方案并不真正起作用:
var=x; val=1\"$'\n'pwd\"
eval $var=\"$val\" # fail with the above
Run Code Online (Sandbox Code Playgroud)
问题是bash有(with ${!foo}
)烘焙的间接变量引用,但是我没有看到任何这种方式来做间接赋值 - 有没有理智的方法来做到这一点?
为了记录,我找到了解决方案,但这不是我认为"理智"的东西......:
eval "$var='"${val//\'/\'\"\'\"\'}"'"
Run Code Online (Sandbox Code Playgroud)