假设我有以下变量:
VAR_A=resultA
VAR_B=resultB
X=A
我想基于VAR_A
的值来获取VAR_B
或X
的值。
这有效,并显示resultA
:
VAR="VAR_$X"
RESULT=${!VAR}
我的问题是,这是否需要一线?
因为indirection expansion似乎不是扩展变量的唯一名称,所以似乎不起作用。我尝试过:
RESULT=${!VAR_$X}
RESULT=${!"VAR_$X"}
...以及许多其他组合,但它始终会写成“不良替代” ...
答案 0 :(得分:3)
使用${!var}
的bash 2表示法似乎没有更短的方法。
作为参考,bash 2的新符号为value=${!string_name_var}
,bash 2的旧符号为eval value=\$$string_name_var
。
您可以使用旧的符号使其按您的意愿工作:
eval RESULT=\$"VAR_$X"
答案 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)
\
前面的$
使它按字面意义对待。