使用变量作为另一个变量名的一部分

Pea*_*ler 0 bash

我正在尝试使用一个变量作为另一个变量名称的一部分。

例如,我在一个CONFIG_范围内有一些变量。

echo $CONFIG_systema_value > "testconfig"
echo $CONFIG_systemb_value > "testconfig2"
Run Code Online (Sandbox Code Playgroud)

然后我有一个“决定”变量,比如 WANTEDSYSTEM

echo $WANTEDSYSTEM > "systema"
Run Code Online (Sandbox Code Playgroud)

我需要能够根据需要的系统变量“动态”切换配置。

我最初的尝试我尝试了这样的事情echo $CONFIG_$WANTEDSYSTEM_value,我希望输出testconfig就像我要求它一样echo $CONFIG_systema_value

lar*_*sks 5

您可以使用${!name}语法间接引用变量,如下所示:

CONFIG_systema_value=foo
CONFIG_systemb_value=bar
WANTEDSYSTEM=systema

target_var_name="CONFIG_${WANTEDSYSTEM}_value"
echo ${!target_var_name}
Run Code Online (Sandbox Code Playgroud)

(请注意,这是特定于 bash 的语法,但听起来这正是您要寻找的。)

  • 当然,您可以编写类似 `eval echo "\$CONFIG_${WANTEDSYSTEM}_value"` 的内容,但我会尽可能避免使用 `eval`,因为如果您不小心传递给它的内容,它可能会产生意想不到的副作用。 (2认同)