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

Bash - Expanding a variable into another variable name

假设我有这些变量:

VAR_A=resultA
VAR_B=resultB
X=A

我想根据X的值得到VAR_AVAR_B的值。

这有效并给出 resultA

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

我的问题是,是否有针对此的单行代码?

因为 indirection expansion 如果不是扩展的变量的全名,似乎不起作用。我试过了:

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

...还有很多其他组合,但它总是写 "bad substitution"...

这应该有效。

RESULT=$(eval echo $VAR_$X)

$前面的\按字面意思处理

使用 ${!var} 的 bash2 符号时,似乎没有更短的方法。 作为参考,"new" bash 2 表示法是 value=${!string_name_var} 而 "old" 表示法是:eval value=$$string_name_var.

您可以只使用旧的表示法使其按您想要的方式工作:

eval RESULT=$"VAR_$X"

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

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

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