Bash 引用附加变量?
如何在bash脚本中实现这一点Bash 引用附加变量?,bash,Bash,如何在bash脚本中实现这一点 #!/bin/sh func() { export ${NAME}_SUFFIX=`result_of_some_command` } NAME=my_name func # This variable will become my_name_SUFFIX # but how can I reference it using $NAME? echo ${${NAME}_SUFFIX} # Doesn't work... 如果可以通过函数调用,我会
#!/bin/sh
func() {
export ${NAME}_SUFFIX=`result_of_some_command`
}
NAME=my_name
func
# This variable will become my_name_SUFFIX
# but how can I reference it using $NAME?
echo ${${NAME}_SUFFIX} # Doesn't work...
如果可以通过函数调用,我会使用declare,但似乎不行。另外,我的declare版本不支持-x。您需要变量间接寻址,它是由
引入的代码>:
var_name=test
test=value
echo ${var_name} # will echo test
echo ${!var_name} # will echo value
您需要变量间接寻址,它是通过引入的代码>:
var_name=test
test=value
echo ${var_name} # will echo test
echo ${!var_name} # will echo value
可以使用间接参数展开:
varname=${NAME}_SUFFIX
echo "${!varname}"
bash
4.3还引入了namerefs,使用起来稍微简单一些
$ NAME=FOO
$ FOO_SUFFIX=3
$ declare -n varname=${NAME}_SUFFIX
$ echo $varname
3
可以使用间接参数展开:
varname=${NAME}_SUFFIX
echo "${!varname}"
bash
4.3还引入了namerefs,使用起来稍微简单一些
$ NAME=FOO
$ FOO_SUFFIX=3
$ declare -n varname=${NAME}_SUFFIX
$ echo $varname
3
我知道你想做什么…警告。“eval”是一种可怕的方法,变量间接寻址更好。但是,这是你想要的
对脚本的一个简单更改:
将“导出”更改为“评估”,它就会工作。你在那里走了大半段路!
哦,并更改您的“echo”语句,如下所示
示例:
#!/bin/sh
func() {
eval ${NAME}_SUFFIX=`result_of_some_command`
}
NAME=my_name
func
# This variable will become my_name_SUFFIX
# but how can I reference it using $NAME?
eval echo "\${${NAME}_SUFFIX}"
我知道你想做什么…警告。“eval”是一种可怕的方法,变量间接寻址更好。但是,这是你想要的
对脚本的一个简单更改:
将“导出”更改为“评估”,它就会工作。你在那里走了大半段路!
哦,并更改您的“echo”语句,如下所示
示例:
#!/bin/sh
func() {
eval ${NAME}_SUFFIX=`result_of_some_command`
}
NAME=my_name
func
# This variable will become my_name_SUFFIX
# but how can I reference it using $NAME?
eval echo "\${${NAME}_SUFFIX}"
declare-x
至少从bash
2.0.2开始得到支持。对不起,我的意思是-g.declare-x
至少从bash
2.0.2开始得到支持。对不起,我的意思是-g.是的,但是我可以使用varname开始:export varname=result\u of_some\u命令
我需要它在$\{NAME}_后缀}ish形式。varname
在func
之外使用。它的值是您想要其值的变量的名称。是的,但是我可以使用varname作为开头:export varname=result\u\u some\u命令
我需要它以$\${name}\u SUFFIX}形式出现。varname
在func
之外使用。它的值是您想要其值的变量的名称;变量间接寻址是更好的方法。但是,再一次,这是你要求的。如果您有任何问题,请告诉我。非常感谢,这是我一直在寻找的@当然是皇帝。如果这是你想要的答案,别忘了把问题标为已回答。当心!我只想再次强调;变量间接寻址是更好的方法。但是,再一次,这是你要求的。如果您有任何问题,请告诉我。非常感谢,这是我一直在寻找的@当然是皇帝。如果这是你想要的答案,别忘了把问题标为已回答。当心!