为了账号安全,请及时绑定邮箱和手机立即绑定

按名称间接查找shell变量

按名称间接查找shell变量

拉莫斯之舞 2019-11-03 08:04:24
假设我在另一个变量中存储了一个变量名:myvar=123varname=myvar现在,我想仅通过使用$ varname变量获得123。有直接的方法吗?我发现没有内置的bash可以按名称查找,因此提出了以下建议:function var { v="\$$1"; eval "echo "$v; }所以var $varname  # gives 123最终看起来还不错,但是我想知道我是否错过了更明显的事情。提前致谢!
查看完整描述

3 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

在bash的手册页中:


${!varname}

如果参数的第一个字符是感叹号,则将引入变量间接寻址级别。Bash使用由其余参数形成的变量的值作为变量的名称;然后扩展此变量,并在其余替换中使用该值,而不是参数本身的值。这称为间接扩展。



查看完整回答
反对 回复 2019-11-04
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

没有直接的符合Posix的语法,只有一个bashism。我通常这样做:


eval t="\$$varname"

这将在任何Posix shell上都可以使用,包括那些bash登录shell以及/bin/sh更小,更快的东西(例如)的系统ash。我喜欢bash并将其用于我的登录shell,但我避免在命令文件中使用bashisms。


注意:编写特定于bash的脚本的一个问题是,即使您可以指望安装的bash,它也可能在路径上的任何位置。在这种情况下,最好使用完全通用的/usr/bin/env shebang样式,但是请注意,这仍然不是100%可移植的,并且存在安全问题。



查看完整回答
反对 回复 2019-11-04
  • 3 回答
  • 0 关注
  • 271 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信