在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限制,因此推迟它的工作,而且现在它只是一个变量(已知名称),引用没有任何问题。

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...