如何连接两个字符串来创建变量名称

时间:2014-02-11 05:01:31

标签: arrays linux string bash concatenation

在bash中有一个这样的数组

array_1=(1 2 3 4 5)
array_2=(6 7 8  9 0)

我有另一个包含1或2的变量。

array_index=1

那么可以使用该变量创建数组名称 - 就像这样吗?

array_${array_index}[0]

3 个答案:

答案 0 :(得分:3)

使用变量间接读取和declare来编写:

array_1=(1 2 3 4 5)
array_2=(6 7 8 9 0)
array_index=1
var="array_${array_index}[0]"

echo "The contents of $var is ${!var}"
declare "$var"="Something Else"
echo "Now $var contains ${!var} instead."

这比eval更安全,更容易正确使用。

答案 1 :(得分:0)

问题是访问您必须执行${array[index]}之类的特定元素。但是你也希望在array部分中嵌套一个变量,在尝试执行扩展时将无法理解,因为它希望array是变量。

因此,我能想到这样做的唯一方法是强制数组扩展发生在变量之后。 e.g。

> array_1=(1 2 3 4 5)
> array_2=(6 7 8  9 0)
> array_index=1
> eval "echo \${array_$array_index[0]}"
1

正如n.m.在评论中指出的那样, evil ,所以在使用它时你应该take care

答案 2 :(得分:0)

要在中创建,正好设置数组的值,您可以使用函数,以便将${array_index}语句作为真正的索引,所以如下:

eval array_${array_index}[0]=1 

要阅读价值,还要

eval echo \${array_${array_index}[0]}
1