Shell数组

定义数组

在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。定义数组的一般形式为:

数组名=(值1 值2 ... 值n)
array_name=(value1 ... valuen)

具体代码如下:

#方式一
array_name=(value0 value1 value2 value3)

#方式二
array_name=(
    value0
    value1
    value2
    value3
)

#方式三:单独定义数组的各个分量
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2

注意:

  • bash支持一维数组,不支持多维数组,并且没有限定数组的大小。
  • 数组元素的下标由0开始编号。
  • 获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。
  • 单数定义数组各个分量的时候,可以不使用连续的下标,而且下标的范围没有限制。

获取数组长度

获取数组长度的方法与获取字符串长度的方法相同,例如:

# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}

脚本示例如下:

#!/bin/bash

#定义数组
array_name=("a" "b" "c" "d")

#输出长度
echo ${#array_name[@]}   //4  整个数组长度
echo ${#array_name[*]}   //4  整个数组长度
echo ${#array_name[2]}   //1  下标为2,即第三个元素长度

读取数组

读取数组元素值的一般格式是:${array_name[index]}

valuen=${array_name[2]}

脚本示例如下:

#!/bin/bash

#定义数组
array_name=("a" "b" "c" "d")

#输出长度
echo ${array_name[@]}
echo ${array_name[*]}
echo ${array_name[0]}
echo ${array_name[1]}

脚本运行结果如下:

a b c d
a b c d
a
b

注意:

  • 下标使用 @ 或 * 获取数组中的所有元素
  • 下标使用数字就是获取某一项元素

删除数组

unset 数组[下标] 可以清除相应的元素,不带下标,清除整个数据。
脚本示例如下:

#!/bin/bash

#定义数组
array_name=("a" "b" "c" "d")

#删除数组某一项
unset array_name[1]
echo ${array_name[*]}

#删除整个数组
unset array_name
echo ${array_name[*]}

脚本运行结果如下:

a c d