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 是邪恶的,因此您在使用它时应该小心。