bash间接和/或nameref
在这个问题上迟到了,因为没有其他答案可以说明nameref ...
使用${!var}
间接语法:
~$ someVariable='Some content'
~$ var=someVariable
~$ echo $var
someVariable
~$ echo ${!var}
Some content
使用namref ( declare -n
) 语法
通过使用nameref,您不仅可以显示变量的内容,还可以填充变量并获取或设置属性。
~$ someVariable='Some content'
~$ declare -n var=someVariable
~$ echo $var
Some content
此语法对函数很有用:
function showVarDetail() {
local -n var=$1
printf 'Variable \47\44%s\47 is %d len, has [%s] flags and contain: %q\n' \
"$1" "${#var}" "${var@a}" "$var"
}
(注意:此函数只是一个示例。这不会正确扩展数组和关联数组!)
然后
~$ someVar='Hello world!'
~$ showVarDetail someVar
Variable '$someVar' is 12 len, has [] flags and contain: Hello\ world\!
~$ declare -r PI=3.14159265358979323844
~$ showVarDetail PI
Variable '$PI' is 22 len, has [r] flags and contain: 3.14159265358979323844
使用nameref 填充变量值
这可以双向工作!
这是一个使用两个变量名作为参数运行的小示例函数。第一个变量应该包含一个字符串,第二个变量将由第一个变量内容的第一个字符填充,然后第一个变量内容将移动 1 个字符:
shift1char <variable string source> <variable target>
shift1char () {
local -n srcStr=$1 tgtVar=$2;
tgtVar=${srcStr::1} srcStr=${srcStr:1}
}
然后
~$ someVar='Hello world!'
~$ shift1char someVar someChar
~$ showVarDetail someVar
Variable '$someVar' is 11 len, has [] flags and contain: ello\ world\!
~$ showVarDetail someChar
Variable '$someChar' is 1 len, has [] flags and contain: H