在bash中间接变量赋值

前端之家收集整理的这篇文章主要介绍了在bash中间接变量赋值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
似乎在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//\'/\'\"\'\"\'}"'"
要点是建议的方法是:
eval "$var=\$val"

RHS也间接完成。由于eval在相同的环境中使用,所以它将具有$ val限制,因此推迟它的工作,而且现在它只是一个变量(已知名称),引用没有任何问题。

猜你在找的Bash相关文章