1

假设我有这些变量:

VAR_A=resultA
VAR_B=resultB
X=A

我想获得 的值VAR_AVAR_B基于 的值X

这是有效的,并给出resultA

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

我的问题是,是否有一个单线?

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

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

......还有很多其他组合,但它总是写“坏替换”......

4

3 回答 3

4

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

你可以使用旧的符号来让它像你想要的那样工作:

eval RESULT=\$"VAR_$X"

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

于 2019-07-15T14:51:10.400 回答
1

你最好使用关联数组,至少在最近版本的 Bash 中:

declare -A var=(
    [A]=resultA
    [B]=resultB
)
x=A
result="${var[$x]}"
echo "$result"  # -> resultA
于 2019-07-15T16:39:16.497 回答
0

这应该有效。

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

前面\$使它被字面上对待。

于 2019-07-15T13:57:27.197 回答