Bash-将变量扩展为另一个变量名

时间:2019-07-15 12:55:40

标签: bash variable-expansion parameter-expansion

假设我有以下变量:

VAR_A=resultA
VAR_B=resultB
X=A

我想基于VAR_A的值来获取VAR_BX的值。

这有效,并显示resultA

VAR="VAR_$X"
RESULT=${!VAR}

我的问题是,这是否需要一线?

因为indirection expansion似乎不是扩展变量的唯一名称,所以似乎不起作用。我尝试过:

RESULT=${!VAR_$X}
RESULT=${!"VAR_$X"}

...以及许多其他组合,但它始终会写成“不良替代” ...

3 个答案:

答案 0 :(得分:3)

使用${!var}的bash 2表示法似乎没有更短的方法。 作为参考,bash 2的新符号为value=${!string_name_var},bash 2的旧符号为eval value=\$$string_name_var

您可以使用旧的符号使其按您的意愿工作:

eval RESULT=\$"VAR_$X"

参考:https://www.tldp.org/LDP/abs/html/bashver2.html#BASH2REF

答案 1 :(得分:1)

至少在最新版本的Bash上,最好使用关联数组:

declare -A var=(
    [A]=resultA
    [B]=resultB
)
x=A
result="${var[$x]}"
echo "$result"  # -> resultA

答案 2 :(得分:0)

这应该有效。

RESULT=$(eval echo \$VAR_$X)

\前面的$使它按字面意义对待。