引用附加变量?

时间:2016-05-12 16:02:18

标签: 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...

我会使用声明,如果它可以通过函数调用,但它似乎没有。另外,我的声明版本不支持-x。

3 个答案:

答案 0 :(得分:3)

您可以使用间接参数扩展:

varname=${NAME}_SUFFIX
echo "${!varname}"

bash 4.3还引入了namerefs,它使用起来有点简单。

$ NAME=FOO
$ FOO_SUFFIX=3
$ declare -n varname=${NAME}_SUFFIX
$ echo $varname
3

答案 1 :(得分:1)

您需要变量间接,这是通过!

引入的
var_name=test
test=value
echo ${var_name}  # will echo test
echo ${!var_name} # will echo value

答案 2 :(得分:-1)

我知道你要做的是什么...... 警告 ......" eval"这是一种可怕的方式,变量间接更好。但是,这就是你要求的。

对您的脚本进行一次简单的更改:

改变"出口"到" eval"它会起作用。你大部分都在那里! 哦,改变你的回声"声明如下所示。

示例:

from ..subpackage2 import myclass