Shell数组
2019-06-26 本文已影响0人
王勇1024
数组中可以存放多个值。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[*]}