Bash脚本数组定义声明及引用

本文介绍了Bash脚本中数组的使用,包括普通数组的定义和自定义索引,以及关联数组的声明和操作。详细阐述了如何通过下标访问元素,数组的截取和替换,以及利用for循环遍历数组的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Bash脚本数组定义声明及引用

一.概述

  • 数据结构,数据序列,保存了连续的多个数据,可以使用索引获取相关元素,相当于多个变量的集合
  • Bash支持一维数组(不支持多维数组),并且没有限定数组的大小
  • 数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0

二.数组的用法

1.普通数组

数组中的元素要用空格隔开
若用逗号隔开,则会被误认为是一个整体
若不指定打印哪个,则默认打印第一个下标的变量
指定下标时,负数表示从后往前数,如-1表示倒数第一个,-3表示倒数第三个

[root@mail ~]# array_1=(1 2 3 4)  
[root@mail ~]# array_2=(1,2,3,4)  
[root@mail ~]# echo $array_1  
1
[root@mail ~]# echo $array_2
1,2,3,4
[root@mail ~]# echo ${array_1[2]}
3
[root@mail ~]# echo ${array_1[-2]}
3
[root@mail ~]# echo ${array_1[-1]}
4
[root@mail ~]# echo ${array_1[-3]}
2

2.普通数组,自定义索引位置

[root@mail ~]# array_3[0]=1
[root@mail ~]# array_3[1]=2
[root@mail ~]# array_3[2]=3
[root@mail ~]# array_3[3]=4
[root@mail ~]# echo ${array_3[*]}  #打印所有的值
1 2 3 4
[root@mail ~]# echo ${array_3[@]}  #用 * 和 @ 都可以
1 2 3 4
[root@mail ~]# echo ${!array_3[@]}  #打印下标
0 1 2 3
[root@mail ~]# echo ${!array_3[*]}
0 1 2 3
[root@mail ~]# echo ${#array_3[2]}  #打印某个变量的长度
1
[root@mail ~]# echo ${#array_3[*]}  #打印数组长度
4
[root@mail ~]# echo ${#array_3[@]}
4

3.关联数组

关联数组支持字符串作为数组索引。使用关联数组必须先使用declare -A声明它
关联数组类似于Python的字典

[root@mail ~]# declare -A array_4
[root@mail ~]# array_4=([a1]=apple [a2]=pear)  #a1,a2是数组的索引,即下标
[root@mail ~]# echo ${array_4[a1]}
apple
[root@mail ~]# echo ${array_4[a2]}
pear
[root@mail ~]# echo ${array_4[*]}
pear apple
[root@mail ~]# echo ${array_4[@]}
pear apple
[root@mail ~]# echo ${#array_4[a2]}  #查看索引a2这个变量的长度
4

4.数组截取、替换

[root@mail ~]# array_5=(1 2 3 4 5 6)
[root@mail ~]# echo ${array_5[*]:2:2}  #指从数组全部元素中第2个元素向后截取2个元素出来
3 4
[root@mail ~]# echo ${array_5[*]:2:4}
3 4 5 6
[root@mail ~]# array_41=${array_1[*]:2:2}  #指从数组全部元素中第2个元素向后截取2个元素出来并赋给数组array_41
[root@mail ~]# echo ${array_41[*]}
3 4
[root@mail ~]# array_42=${array_5[*]/6/5}  #将数组array_5中的6替换成5,然后将替换后的结果赋值给array_42
[root@mail ~]# echo ${array_42[*]}
1 2 3 4 5 5

5.for循环遍历数组

for i in ${array_t5[*]}
do
echo $i
done

#常用的三种方法
array_t6=($(ls /boot))
for i in ${array_t6[*]};do #以数组值的方式直接遍历数组
echo $i
done

for ((i=0;i<${#array_t6[*]};i++));do # 以数组变量个数的方式遍历数组
echo ${array_t6[$i]}
done

for i in ${!array_t6[*]};do # 以数组index的方式遍历数组
echo ${array_t6[$i]}
done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值