http://xiaowang.net/bgb-cn/ch10s02.html

10.2.1. 建立数组

数组是一个包含多个值的变量。任何变量都可以在数组中使用。数组的尺寸没有最大限制,也不要求成员变量连续索引或者赋值。数组是基于0的:第一个元素的下标以0开始。

间接的声明使用以下的语法来声明一个变量:

ARRAY[INDEXNR]=value

INDEXNR 需要使用一个值为正数的数学表达式。

一个数组的外部声明使用内建命令 declare 来完成:

declare -a ARRAYNAME

一个带有索引值的声明也是可以接受的,但是索引值将被忽略。对数组的指定属性可以通过使用内建命令 declarereadonly。属性对数组中的所有变量起作用;你不能使用混合数组。

数组变量也可以使用这种格式的复合赋值来建立:

ARRAY=(value1 value2 ... valueN)

每个值将以这种形式 [indexnumber=]string 排列。索引号是可选的。如果提供,索引号就赋给它;otherwise the index of the element assigned is the number of the last index that was assigned, plus one. 这样的格式 declare 也可以接受。如果不提供索引值,那索引自动从零开始。

在数组中加入缺少或者额外的成员使用以下语法:

ARRAYNAME[indexnumber]=value

记住 read 内建命令提供 -a 选项,来允许对一个数组的成员变量进行读取和赋值。

10.2.2. 对数组的变量解引用

为了指明在一个数组中的项目的内容,为了指向一个数组中的一个项目的内容,使用{}。这样是必须的,正如你可以从下面的例子看出,来绕过扩展操作符的shell解释。如果索引的数字是 @ 或者 *,一个数组的所有的成员都将被引用。

[bob in ~] ARRAY=(one two three)
[bob in ~] echo ${ARRAY[*]}
one two three
[bob in ~] echo $ARRAY[*]
one[*]
[bob in ~] echo ${ARRAY[2]}
three
[bob in ~] ARRAY[3]=four
[bob in ~] echo ${ARRAY[*]}
one two three four

不提供索引号码来指向某个数组的一个数字变量的内容和指向第一个元素的内容是一样的。

10.2.3. 删除数组变量

unset 内建命令用来删除数组或者数组成员:

[bob in ~] unset ARRAY[1]
[bob in ~] echo ${ARRAY[*]}
one three four
[bob in ~] unset ARRAY
[bob in ~] echo ${ARRAY[*]}
<--no output-->