如何联接两个字符串以创建变量名称



bash中有这样的数组

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

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

array_index=1

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

array_${array_index}[0]

使用变量间接寻址读取和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 更安全、更容易正确使用。

要在 bash 中创建数组,准确地设置数组的值,您可以使用 eval 函数,以便将${array_index}语句作为真正的索引,请执行以下操作:

eval array_${array_index}[0]=1 
要读取值

,还要读取值:

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

问题是要访问特定元素,您必须执行类似 ${array[index]} 的操作。但是你也想在array部分嵌套一个变量,bash 在尝试执行扩展时不会理解,因为它期望array是一个变量。

因此,我能想到的唯一方法是强制数组扩展晚于变量发生。

例如
> 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.在评论中指出的那样,eval 是邪恶的,因此您在使用它时应该小心。

相关内容

  • 没有找到相关文章

最新更新