我在 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
和 中。zsh
KSH_ARRAYS