相关疑难解决方法(0)

bash中的间接变量赋值

似乎在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)

bash quotes eval variable-assignment

34
推荐指数
5
解决办法
3万
查看次数

标签 统计

bash ×1

eval ×1

quotes ×1

variable-assignment ×1