为什么这个与数组相关的代码在每行末尾打印索引?

为什么这个与数组相关的代码在每行末尾打印索引?

我在 BASH 中使用数组时遇到问题。我已将问题简化为以下代码:

#! /bin/bash

A1[0]="user1 user2 user3" 
A1[1]="user4 user5 user6"

for each in ${!A1[*]} 
do
        echo -n "$each "
        echo $A1[$each] 
done

输出如下:

0 user1 user2 user3[0]
1 user1 user2 user3[1]

我无法理解为什么每一行都有 [X] (大概是数组元素的指示)。如何从数组中恢复索引和数据行而不附加索引?

答案1

bash* 中,您必须使用这样的大括号:

echo ${A1[$each]}

为数组添加[$each]下标A1

每人重击(1):

数组的任何元素都可以使用 ${name[subscript]} 引用。需要使用大括号以避免与路径名扩展发生冲突。

再往下说:

引用不带下标的数组变量相当于引用下标为 0 的数组。

这就是为什么你的原始代码不起作用,因为如果你使用大括号,shell 只会看到下标。

所以

echo $A1[$each]

相当于

echo ${A1[0]}[$each]

其中方括号没有任何特殊含义,因此按原样打印。

  • 如果设置了该选项,则在ksh和 中。zshKSH_ARRAYS

相关内容