熟悉 Shell脚本:数组

定义数组

所谓数组,是指将具有相同类型的若干变量按照一定的顺序组织起来的一种数据类型。介绍最常用的几种数组定义方法。

通过指定元素值来定义数组

熟悉 Shell脚本:数组

熟悉 Shell脚本:数组

通过declare语句定义数组

我们已经介绍过,用户可以通过declare语句来声明变量。除此之外,用户还可以使用该语句来定义数组。

熟悉 Shell脚本:数组

在上面的语法中,a选项表示后面定义的是一个数组,其名称为array。

熟悉 Shell脚本:数组

通过元素值集合定义数组

熟悉 Shell脚本:数组

熟悉 Shell脚本:数组

通过键值对定义数组

熟悉 Shell脚本:数组

熟悉 Shell脚本:数组

数组和普通变量

在Shell中,所有的普通变量实际上都可以当做数组变量来使用。对普通变量操作与对相同名称的下标为0的元素的操作是等效的。

熟悉 Shell脚本:数组熟悉 Shell脚本:数组

数组的赋值

按索引为元素赋值

熟悉 Shell脚本:数组

通过集合为数组赋值

熟悉 Shell脚本:数组

访问数组

访问第1个数组元素

熟悉 Shell脚本:数组

通过下标访问数组元素

熟悉 Shell脚本:数组

计算数组的长度

熟悉 Shell脚本:数组

或者

熟悉 Shell脚本:数组

以切片方式获取部分数组元素

所谓切片,是指截取数组的部分元素或者某个元素的部分内容。例如,指定一个具体的数组,截取从第2个元素开始的5个元素。或者,截取某个数组中指定元素的前几个字符。

当然,对于上面所说的切片,用户完全可以使用循环结构来实现。但是对于切片,Shell提供了更加快捷的方式。用户可以像获取数组元素的值一样来获取数组的某个切片。获取切片的基本语法如下:

熟悉 Shell脚本:数组

熟悉 Shell脚本:数组

熟悉 Shell脚本:数组

通过上面的方式,用户得到的切片是一个字符串,并非数组。当然用户可以将这个切片赋给其他的变量,以供其他地方使用。下面的例子就验证了这一点。

熟悉 Shell脚本:数组

熟悉 Shell脚本:数组

但是,在某些情况下,用户可能希望切片得到的结果仍然是一个数组。要得到这个结果,用户可以使用圆括号操作符,其基本语法如下:

熟悉 Shell脚本:数组

上面的语法只是在原来的基础上增加了一对圆括号。

熟悉 Shell脚本:数组

熟悉 Shell脚本:数组

除了可以对数组进行切片之外,用户还可以对数组元素进行切片,截取某个数组元素的一部分,得到一个子字符串。对数组元素进行切片的语法与对数组进行切片的语法基本相同。只是将其中的通配符换成某个具体的下标,如下:

熟悉 Shell脚本:数组

熟悉 Shell脚本:数组

在上面的代码中,第6行对下标为4的第5个元素进行切片,从第3个字符开始,截取其中的4个字符。该程序的执行结果如下:

熟悉 Shell脚本:数组

注:

无论是对数组进行切片还是对数组元素进行切片,如果其中的长度值超过数组或者数组元素的长度,都会截取到数组或者数组元素的末尾为止。

数组元素的替换

在Shell中,用户还可以对数组进行另外一种特殊的操作,称为数组元素的替换。所谓替换,是指将某个数组元素的部分内容用其他的字符串来代替,但是并不影响原来的数组的值。

熟悉 Shell脚本:数组

在上面的语法中,array表示要操作的数组名称,pattern参数表示要搜索的字符串,replacement参数表示用来替换的字符串。

熟悉 Shell脚本:数组

熟悉 Shell脚本:数组

注:为了得到一个新的数组变量,用户需要使用圆括号操作符。否则,得到的将是一个字符串变量。

删除数组

删除指定数组元素

与删除其他的Shell变量一样,用户可以使用unset命令来删除某个数组元素,其基本语法如下:

熟悉 Shell脚本:数组

在上面的语法中,array表示数组名称,n表示要删除的数组元素的下标,从0开始计算。

删除整个数组

如果某个数组不再需要了,用户同样可以使用unset命令来将其删除,基本语法如下:

熟悉 Shell脚本:数组

数组的其他操作

复制数组

熟悉 Shell脚本:数组

连接数组

熟悉 Shell脚本:数组

在执行数组连接时,参与连接的数组之间要保留1个空格。

加载文件内容到数组

在Shell中,用户可以将普通的文本文件的内容直接加载到数组中,文件的每一行构成数组一个元素的内容。这在处理一些日志文件的时候非常有用。

熟悉 Shell脚本:数组

熟悉 Shell脚本:数组