Shell数组

数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)。

与大部分编程语言类似,数组元素的下标由0开始。

  • 定义数组
    Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:
array_name=(value1 ... valuen)

Shell 是弱类型的,它并不要求所有数组元素的类型必须相同,例如:

my_array=(1 2 "C" 4)

Shell 数组的长度不是固定的,定义之后还可以增加元素。例如,对于上面的 my_array 数组,它的长度是 4,使用下面的代码会在最后增加一个元素,使其长度扩展到 5:

my_array[4]="E"

此外,你也无需逐个元素地给数组赋值,下面的代码就是只给特定元素赋值:

ages=([3]=24 [5]=19 [10]=12)

以上代码就只给第 3、5、10 个元素赋值,所以数组长度是 3。

我们也可以使用下标来定义数组:

array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
  • 访问数组
${array_name[index]}

注意:不能写成 $array_name[index]的形式

示例

$ arr=(A B C D)
$ echo ${arr[2]}
C
  • 获取数组中的所有元素
    使用${array_name[@]}${array_name[*]} 可以获取数组中的所有元素,例如:
$ arr=(A B C D)
$ echo ${arr[*]}
A B C D
$ echo ${arr[@]}
A B C D
  • 获取数组的长度
    可以通过 ${#my_array[@]}${#my_array[*]} 的形式获取数组的长度,例如:
$ arr=(A B C D)
$ echo 数组的长度为: ${#arr[@]}
数组的长度为: 4
$ echo 数组的长度为: ${#arr[*]}
数组的长度为: 4
  • 字符串转数组
$ str="A B C D"
$ arr=(${str})
$ echo ${arr[*]}
A B C D
  • 数组拷贝
array2=( "${array[@]}" )
  • 数组拼接
    可以使用 (${arr1[@]} ${arr2[@]})(${arr1[*]} ${arr2[*]}) 的方式将多个数组拼接成一个新的数组,示例:
$ arr1=(A B C D)
$ arr2=(1 2 3 4)
$ arr_new=(${arr1[*]} ${arr2[*]})
$ echo 合并后数组元素:${arr_new[*]}
合并后数组元素:A B C D 1 2 3 4
  • 删除数组元素
    使用 unset 关键字来删除数组元素,具体格式如下:
unset array_name[index]

其中,array_name 表示数组名,index 表示数组下标。
如果不写下标,而是写成下面的形式:

unset array_name

那么就是删除整个数组,所有元素都会消失。示例:

arr=(A B C D)
$ unset arr[1]
$ echo ${arr[*]}
A C D
$ unset arr
$ echo ${arr[*]}

你可能感兴趣的:(Shell数组)