似乎在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限制,因此推迟它的工作,而且现在它只是一个变量(已知名称),引用没有任何问题。
原文地址:https://www.jb51.cc/bash/387692.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。