假设我将变量的名称存储在另一个变量中:
myvar=123
varname=myvar
Run Code Online (Sandbox Code Playgroud)
现在,我想通过使用$ varname变量得到123.有直接的方法吗?我发现没有这样的bash内置用于按名称查找,所以想出了这个:
function var { v="\$$1"; eval "echo "$v; }
Run Code Online (Sandbox Code Playgroud)
所以
var $varname # gives 123
Run Code Online (Sandbox Code Playgroud)
这最终看起来并不太糟糕,但我想知道我是否错过了一些更明显的东西.提前致谢!
tan*_*ens 15
${!varname}
Run Code Online (Sandbox Code Playgroud)
如果参数的第一个字符是感叹号,则引入变量间接的级别.Bash使用从参数的其余部分形成的变量的值作为变量的名称; 然后展开此变量,并将该值用于替换的其余部分,而不是参数本身的值.这被称为间接扩张.
Dig*_*oss 12
没有直接符合Posix的语法,只有一个bashism.我经常这样做:
eval t="\$$varname"
Run Code Online (Sandbox Code Playgroud)
这适用于任何Posix shell,包括那些bash登录shell的系统,它们/bin/sh更小更快ash.我喜欢bash并将它用于我的登录shell但我避免在命令文件中使用bashisms.
/usr/bin/env shebang风格可能是一个好主意,但请注意,这仍然不是100%便携并且存在安全问题.
| 归档时间: |
|
| 查看次数: |
4146 次 |
| 最近记录: |