一、数组的定义
所谓数组,是指将具有相同类型的若干变量按照⼀定的顺序组织起来的⼀种数据类型。Shell语言对于数组的支持非常强大。在Shell中,用户可以通过多种方式来创建⼀个数组。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 Python 类似)。
在Shell中,用户可以通过直接指定数组中的元素值来定义⼀个新的数组变量,其基本语法如下:
<数组名>[<数组元素的索引>]=<数组元素索引对应的值>
例如:
使用 declare 语句定义数组,基本语法如下,其中 -a 选项后面定义的是一个名为array 的数组
declare -a <array>
在某些情况下,用户可能需要⼀次性为数组的所有元素提供⼀个值。此时,用户可以以元素值集合的形式来定义数组,其基本语法如下:
<array>=(<v0> <v1> <v2> … <vn>)
array是数组名称,等号后⾯的是所有的元素值的集合,这些值按照⼀定的顺序来排列,之间用空格隔开,最后所有的值用圆括号括起来。Shell会将这些值从下标为0的第1个元素开始,依次将这些值赋给数组的所有元素。
当需要定义索引不连续的数组时,需要显式指定要赋值的数组元素,也就是要为哪个数组元素指定值。此时,用户可以使用键值对的方式来定义数组,其基本语法如下:
<数组名>=([0]=<索引0对应的值> … [<索引n>]=<索引n对应的值>)
每个索引和值组成⼀个键值对,键和值之间用等号隔开。
示例:
二、数组的赋值
在Shell中,为数组元素赋值有两种基本的方法,分别是按索引赋值和以集合的形式赋值。其中,按索引赋值是最基本的赋值方法,其基本语法如下:
<数组名>[<索引>]=<值>
示例:
通过集合为数组赋值与通过集合定义数组的语法完全相同。
三、数组的访问
- 通过数组下标访问数组元素
其基本语法如下:
${<数组名>[<索引下标>]}
在Shell中,下标从0开始,因此第1个数组元素是 array[0](假设数组名为array)。如果数组的长度为 n ,则最后⼀个元素的下标为 n-1
- 获取数组的长度
可以通过特殊操作符 $# 来获得数组长度。该操作符的基本语法如下:
${#<数组名>[@]}
或者
${#<数组名>[*]}
方括号中的@或者*是通配符,表示匹配所有的元素
- 通过循环遍历数组元素
实际上就是通过下标访问数组元素
- 获取数组所有元素
实际上就是通过下标访问数组元素时,指定下标为 @ 或者 * (此为通配符,表示匹配所有元素)。
- 以切片方式获取部分数组元素
所谓切片,是指截取数组的部分元素或者某个元素的部分内容。
对于切片,Shell 提供了更加快捷的方式。用户可以像获取数组元素的值⼀样来获取数组的某个切片。获取切片的基本语法如下:
${<数组名>[@|*]:<起始索引下标>:<切片长度>}
- 替换数组元素
所谓替换,是指将某个数组元素的部分内容⽤其他的字符串来代替,但是并不影响原来的数组的值。
基本语法如下:
${<数组名>[@|*]/<要被替换的字符串>/<用来替换的字符串>}
示例:
四、数组的删除
- 删除指定数组元素
与删除其他的 Shell 变量⼀样,⽤户可以使用 unset 命令来删除某个数组元素
基本语法如下:
unset <数组名> [<要删除数组元素的索引下标>]
示例:
- 删除整个数组
类似于删除数组元素。基本语法如下:
unset <要删除的数组名称>
示例: