动态构建 shell 变量

动态构建 shell 变量

我需要动态创建一个变量名,如下所示(简化示例):

#!/bin/sh

IDX=1
SERIES1="a b c d e f g"
SERIES2="h i j k l m n"

# How to get this value contains $SERIES1 or $SERIES2
# depending on the value of $IDX
CURRENT=${SERIES\${IDX}} # doesn't work, just an example

如果IDX=1我期望

echo $CURRENT

显示

a b c d e f g

如果IDX=2要显示

h i j k l m n

我需要在循环中使用它来获取来自另一个脚本的不确定数量的 SERIES。

编辑 当前用作shshell,但如果需要,我可以使用不同的 shell(即使这意味着我可能需要转换一些东西,但没关系)

我的问题是:如何将所需的系列分配给CURRENT

我尝试过什么?上面的例子(不起作用)和其他类似的例子:

CURRENT=$${SERIES$${IDX}}
CURRENT=${SERIES${IDX}}

编辑2

我正在去做某件事:

eval echo $`echo "SERIES$IDX"`

这将显示正确的系列。但是我找不到将其分配给的方法CURRENT

CURRENT=eval echo $`echo "SERIES$IDX"`

但我想再深入挖掘一下,我就会找到一些东西。不过,任何帮助都值得感激

编辑3

好的,我找到了

eval "CURRENT=\$SERIES$IDX"
echo $CURRENT

显示我期望的内容,因此CURRENT具有正确的内容。

答案1

谢谢网站(可能其他人也有类似的答案......):

#!/bin/sh

IDX=1
SERIES1="a b c d e f g"
SERIES2="h i j k l m n"

eval "CURRENT=\$SERIES$IDX"

现在CURRENT保存了 的内容SERIES1。如果我将其更改IDX为 2,那么我将获得SERIES2内容。

答案2

这不正是您想要的,但是如果您使用,bash那么sh您可以使用数组:

IDX=1
SERIES[1]="a b c d e f g"
SERIES[2]="h i j k l m n"

CURRENT=${SERIES[$IDX]}

相关内容