一、声明数组
数组的声明有以下几种方式:
- 直接赋值:
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 |
![[leetcode-shell]192-统计词频](https://www.dyxmq.cn/wp-content/themes/begin/prune.php?src=https://www.dyxmq.cn/wp-content/uploads/2020/02/b3b4a-image6c552cb516ad2b7c.png&w=280&h=210&a=&zc=1)
![[leetcode-shell]195-第十行](https://www.dyxmq.cn/wp-content/static/thumbnail/PIC_20140218_145712_894.jpg)


评论