假设我在另一个变量中存储了一个变量名:myvar=123varname=myvar现在,我想仅通过使用$ varname变量获得123。有直接的方法吗?我发现没有内置的bash可以按名称查找,因此提出了以下建议:function var { v="\$$1"; eval "echo "$v; }所以var $varname # gives 123最终看起来还不错,但是我想知道我是否错过了更明显的事情。提前致谢!
3 回答
江户川乱折腾
TA贡献1851条经验 获得超5个赞
在bash的手册页中:
${!varname}
如果参数的第一个字符是感叹号,则将引入变量间接寻址级别。Bash使用由其余参数形成的变量的值作为变量的名称;然后扩展此变量,并在其余替换中使用该值,而不是参数本身的值。这称为间接扩展。
开心每一天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%可移植的,并且存在安全问题。
- 3 回答
- 0 关注
- 271 浏览
添加回答
举报
0/150
提交
取消