Shell 数组


数组用来保存多个数据,通过下标访问数组的元素。


shell只支持一维数组。数组索引从0开始。数组的长度是不固定的。

创建数组和访问数组

有两种创建数组的方法:

  • 给数组元素赋值时自动创建数组。例如a[0]=1
  • 通过指定数组元素的方式。a=( 1 2 3 )

通过${a[n]}方式访问数组元素,a是数组名,n是下标,用来指定访问数组元素的位置。

@*下标用来访问数组的每个元素。

#!/bin/sh
a[0]=1
echo ${a[0]}  # 1
a2=( "red" "blue" "green")
for color in ${a2[@]} ; do
  echo "$color" # red blue green
done

数组元素个数

数组元素个数是数组中有赋值的元素的个数,通过${#a[@]}得到数组a的元素的个数。

通过${!a[@]}得到数组中有数据的元素的下标。

#!/bin/sh
a[0]=1
a[5]=2
echo "${#a[@]}" # 2

for i in ${!a[@]} ; do
  echo "$i" # 0 5
done

在数组最后增加元素

使用运算符+=在数组最后增加元素,可一次增加一或多个元素。

#!/bin/sh
a=( 1 2 )
a+=( 3 4 )
echo ${a[@]}  # 1 2 3 4

对数组排序

先列出数组的所有元素,然后使用sort命令对数组排序。

#!/bin/sh
a=( 3 5 2 1)
a2=($(for i in "${a[@]}"; do echo $i; done | sort))
echo "${a2[@]}" # 1 2 3 5

删除数组

使用unset命令删除数组或数组的元素。

#!/bin/sh
a=( 1 2 3 )
unset 'a[2]'
echo "${a[@]}" # 1 2

unset a
echo "${a[@]}" #