Bash - 将变量扩展为另一个变量名
Bash - Expanding a variable into another variable name
假设我有这些变量:
VAR_A=resultA
VAR_B=resultB
X=A
我想根据X
的值得到VAR_A
或VAR_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"
你最好使用关联数组,至少在 Bash 的最新版本上是这样:
declare -A var=(
[A]=resultA
[B]=resultB
)
x=A
result="${var[$x]}"
echo "$result" # -> resultA
假设我有这些变量:
VAR_A=resultA
VAR_B=resultB
X=A
我想根据X
的值得到VAR_A
或VAR_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"
你最好使用关联数组,至少在 Bash 的最新版本上是这样:
declare -A var=(
[A]=resultA
[B]=resultB
)
x=A
result="${var[$x]}"
echo "$result" # -> resultA