一、声明数组
数组的声明有以下几种方式:
- 直接赋值:
arr[0]="0" arr[1]="1" arr[2]="2"
- declare声明:
declare -a arr2
- 小括号空格:
arr3=("1" "2" "3")
- 引号空格:
arr4="1 2 3"
- 混合声明:
arr5=([0]="0" [1]="1" [2]="2")
引号空格法在某些时候可能会引起错误,更常用小括号空格法。
二、遍历数组
遍历数组有两种方式,一种是标准的for
循环,一种是for..in
形式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#! /bin/bash arr1=(1 2 3) # 使用标准for循环 for ((i = 0; i < ${#arr1[@]}; i++)) do echo ${arr1[$i]} done echo "-------" # for..in for i in ${arr1[@]} do echo $i done |
输出:
1 2 3 4 5 6 7 |
1 2 3 ------- 1 2 3 |
注意事项
对于以上面第四种方式(引号空格法)定义的数组在使用这两个for循环时结果有所不同。
1 2 3 4 5 6 7 8 9 10 11 |
arr2="1 2 3" for ((i = 0; i < ${#arr2[@]}; i++)) do echo ${arr2[$i]} done echo "------" for i in ${arr2} do echo $i done |
输出:
1 2 3 4 5 |
1 2 3 ------ 1 2 3 |
可见,使用引号空格法构造的数组在使用标准for循环时把数组当成了一个元素,而for..in
形式则正确输出。
三、其他用法
3.1 获取数组长度
获取数据长度有两种形式:${{ '{#' }}arr[@]}
和${{ '{#' }}arr[*]}
,通过引号空格法
创建的数组长度为1
。
1 2 3 4 5 6 7 8 9 10 |
#! /bin/bash arr1=(1 2 3) arr2="1 2 3" echo ${#arr1[@]} # 3 echo ${#arr1[*]} # 3 echo ${#arr2[@]} # 1 echo ${#arr2[*]} # 1 |
3.2 删除数组和数组元素
删除数组元素
1 2 3 4 5 6 7 |
arr=(1 2 3) unset arr[1] echo "len(arr1): "${#arr[@]} for i in ${arr[@]} do echo $i done |
输出:
1 2 3 |
len(arr1): 2 1 3 |
删除数组
1 |
unset arr |
3.3 切片
shell数组有类似python和golang中的数组切片功能:
1 2 |
arr3=(0 1 2 3 4 5 6 7 8 9) echo ${arr3[@]:3:5} |
输出:
1 |
3 4 5 6 7 |
评论