Shell脚本编程基础第五天之--数组

157 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第21天,点击查看活动详情

  • Bash 4.0开始支持关联数组,关联数组也称为“键值对(key-value)”数组,键(key)也即字符串形式的数组下标,值(value)也即元素值;索引数组就是常规的用数字作为下标。当然了,Shell只支持一维数组,不支持多维数组。

image.png

  • declare -a声明的是「索引」数组,declare -A声明的是「关联」数组。如果同时使用-a -A,-A优先级更高,数组被声明为「关联」数组
  • Bash 4.2开始支持declare -g方式声明关联数组为「全局」变量,在此之前,关联数组仅限局部变量作用域

脚本文件:

# 查看当前Bash的declare支持的参数
# help declare

# 声明一个 索引 数组
declare -a indexed_arr

# 声明一个 关联 数组
declare -A associative_arr

# Bash 数组赋值方法如下
# 索引 数组可以跳过数组声明直接赋值的同时即完成了数组初始化
my_array=(apple banana "Fruit Basket" orange)

associative_arr['hello']='world'
associative_arr['well']='done'

# bash支持“稀疏”数组:即数组元素不必连续存在,个别索引位置上可以有未初始化的元素
new_array[2]=apricot

# 数组元素的个数通过 ${#arrayname[@]} 获得
echo ${#my_array[@]}

# 读取数组中的元素,{}是必须有的
echo ${my_array[2]}
# echo $my_array[2] 是错误的读取方法

# 遍历数组的方法
## 索引数组
for ele in "${my_array[@]}";do
        echo "$ele"
done    

## 关联数组
for key in "${!associative_arr[@]}";do
        echo "$key ${associative_arr[$key]}"
done    

启动:分成了四部分输出

image.png

第一部分输出了 4 ,是echo ${#my_array[@]}命令输出的,my_array索引数组在前面没有声明直接赋值完成了初始化(关联数组则不可),初始化了4个元素,所以这里输出了4
第二部分输出了 Fruit Basket,是echo ${my_array[2]}命令输出的,众所周知,数组下标从0开始,也就是这句命令是输出数组中第三个元素,也就是初始化里第三个
第三部分通过遍历的方式输出了my_array数组中所有元素,用的for循环,跟所有编程语言的语法都大同小异了

for ele in "${my_array[@]}";do
        echo "$ele"
done  

第四部分通过遍历的方式输出了associative_arr数组中所有元素,也用for循环,注意不同点在于引用数组时有个英文感叹号在里面

for key in "${!associative_arr[@]}";do
        echo "$key ${associative_arr[$key]}"
done 

当然了,除了声明、初始化、遍历数组之外,自然也有删除数组的操作,使用unset命令即可以做到。用echo输出了分割线跟上面的隔开,并且删除了元素之后再次输出数组

image.png

image.png

可以看到,元素确实被删除了,这里有个问题就是,每次遍历都要写一堆脚本,显然不合理,但其实可以用函数包起来,每次调用函数就可以了,当然了,函数在后面会说。

Shell脚本编程基础第六天之--基本算术运算、字符串操作