数组用括号
()
表示,元素之间使用空格分隔
shell只支持一维数组
#方式一
array_name=(item1 item2 ...)
arr1=( 29 100 13 8 91 44 )
#方式二
array_name=([索引下标1]=item1 [索引下标2]=item2 ...)
arr2=( [0]=1 [2]=100 [4]=aa )
# 数组元素可以不相同
arr=(20 56 "http://www.baidu.com/")
# 是动态的数组,定义后还可以赋值
arr[6]=58
# 由于上面只赋值了4个元素, 所以数组的长度是4
[root@node2 ~] echo ${#arr[*]}
4
Shell的Map(关联数组)
使用关键字declare -A
定义key-value关联数组 arr=([key]=value [key1]=value1 ...])
# 定义关联数组
[root@node2 ~] declare -A arr5=([name]="baidu" [age]=20 ["sex"]=women)
# 根据key获取value
[root@node2 ~] echo ${arr5[age]}
20
# 定义成关联数组后无法使用索引获取
[root@node2 ~] echo ${arr5[1]}
[root@node2 ~]
语法
- 通过下标获取元素,index从0开始
${arr[index]}
需要使用变量符号
${}
[root@node2 ~] arr=(20 56 "http://www.baidu.com/")
[root@node2 ~] echo ${arr[1]}
56
# 不加索引默认显示第0个元素
[root@node2 ~] echo ${arr}
20
- 获取值并赋值给其它变量
item=${arr[index]}
[root@node2 ~] item=${arr[1]}
[root@node2 ~] echo $item
56
- 获取所有元素
${arr[@]}
或者${arr[*]}
[root@node2 ~] echo ${arr[*]}
20 56 http://www.baidu.com/ 58
[root@node2 ~] echo ${arr[@]}
20 56 http://www.baidu.com/ 58
- 获取数组长度
${#arr[@]}
或者${#arr[*]}
[root@node2 ~] echo ${#arr[*]}
4
[root@node2 ~] echo ${#arr[@]}
4
- 获取数组指定元素的长度
${#arr[索引]}
[root@node2 ~] echo ${#arr[2]}
21
# 不加索引默认计算第0个元素长度
[root@node2 ~] echo ${#arr}
2
数组合并
相当于使用()
重新定义一个数组array_new=(${array1[*]} ${array2[@]} ...)
# 定义数组
[root@node2 ~] echo ${arr[@]}
20 56 http://www.baidu.com/ 58
[root@node2 ~] arr2=(1 2 3)
# 合并两个数组的所有元素
[root@node2 ~] arr3=(${arr[*]} ${arr2[@]})
[root@node2 ~] echo ${arr3[@]}
20 56 http://www.baidu.com/ 58 1 2 3
# 合并一个数组所有元素及另一个数组的指定元素
[root@node2 ~] arr4=(${arr[*]} ${arr2[0]})
[root@node2 ~] echo ${arr4[@]}
20 56 http://www.baidu.com/ 58 1
# 合并一个数组所有元素及自定义元素
[root@node2 ~] arr5=(${arr[*]} 66)
[root@node2 ~] echo ${arr5[@]}
20 56 http://www.baidu.com/ 58 66
数组删除
删除数组与删除变量的语法相同unset array_name[index]
或unset array_name
# 数组5
[root@node2 ~] echo ${arr5[@]}
20 56 http://www.baidu.com/ 58 66
# 删除数组第0个元素
[root@node2 ~] unset arr5[0]
[root@node2 ~] echo ${arr5[@]}
56 http://www.baidu.com/ 58 66
# 删除整个数组
[root@node2 ~] unset arr5
[root@node2 ~] echo ${arr5[@]}
[root@node2 ~]