微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/bash/387692.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐