我需要动态创建一个变量名,如下所示(简化示例):
#!/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。
编辑
当前用作sh
shell,但如果需要,我可以使用不同的 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]}