阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

如何在 bash 中使用索引数组

286次阅读
没有评论

共计 2748 个字符,预计需要花费 7 分钟才能阅读完成。

导读 数组是一种数据结构,表示具有相同数据类型的对象集合。bash shell 中支持两种类型的数组:关联数组或索引数组。在本文中,将演示如何在 bash 中使用索引数组。以下使用 shell 示例来说明索引数组的详细用法。
声明一个索引数组

可以使用 declare -a 隐式声明一个索引数组。请注意,declare -A 选项用于隐式声明关联数组。

$ declare -a 
初始化索引数组

你可以通过多种方式初始化索引数组。由于 bash 数组可以存储整数或字符串,因此可以使用整数数组或字符串数组初始化给定的数组变量。甚至可以混合存储整数和字符串。但是不能创建嵌套数组,Bash 只支持一维数组。

# 初始化一个索引数组,同时显式声明它
# declare -a my_array=(2 4 6 8 10)
# 初始化一个索引数组,同时隐式声明它
# my_array2=(orange apple grape mango)
# 存储整数和字符串的混合键值数组
# my_array3=(100 200 "bob" 500 "dan")

如何在 bash 中使用索引数组
如果要使用默认值 0 来初始化较大的数组中每个元素,可以使用 for 循环。

# 初始化一个大小为 500 的数组,默认值为 0
# declare -a my_big_array=($(for i in {1..500}; do echo 0; done))
读取和写入索引数组中的值

要在索引数组中的特定索引位置读取或写入值,使用中括号 [] 指定索引。

# my_array2=(orange apple grape mango)
# echo ${my_array2[2]}
grape

如果不初始化数组,默认情况下数组中的每个元素都初始化为空值。例如:

[root@localhost ~]# vim my_array.sh 

#!/bin/bash
declare -a my_array4
my_array[10]=apple

if [-z "${my_array[0]}" ]; then
echo "The element at index 0 is empty"
else
echo "The element at index 0 is non-empty: ${my_array[0]}"
fi

如何在 bash 中使用索引数组
执行脚本后输出的结果:

# sh my_array.sh 
The element at index 0 is empty

如何在 bash 中使用索引数组

查找数组长度

如果想知道索引数组的长度时,可以使用以下带有 #@ 符号的表达式。

# fruit_array=(orange apple grape mango)
# echo "Array size: ${#fruit_array[@]}"
Array size: 4

如何在 bash 中使用索引数组

数组中添加条目

可以动态地将一个或多个值添加到数组的末尾,而不是在数组的特定位置写入值。使用 += 运算符来做到这一点。

# declare -a color_array=(red yellow)
# color_array+=(blue)
# color_array+=(black white)

如何在 bash 中使用索引数组
另一种递增索引数组的方法如下。

# fruit_array=(orange apple grape mango)
# fruit_array=(${fruit_array[@]} pineappe watermelon)

如何在 bash 中使用索引数组
还可以利用数组长度信息将值附加到数组的末尾。基本上你在数组的最后一个索引处插入一个值。

遍历数组

如果要遍历索引数组,可以使用以下 for 循环。

[root@localhost ~]# vim array_for1.sh
[root@localhost ~]# cat array_for1.sh 
#!/bin/bash
declare -a color_array=(red yellow skyblue gray black white)

for color in ${color_array[@]}; do
    echo $color
done

以下是执行脚本后的输出信息:

[root@localhost ~]# sh array_for1.sh 
red
yellow
skyblue
gray
black
white

如何在 bash 中使用索引数组
或者,可以使用数组索引遍历数组,如下所示:

[root@localhost ~]# vim array_for2.sh 
[root@localhost ~]# cat array_for2.sh 
#!/bin/bash
declare -a color_array=(red yellow skyblue gray black white)

for i in ${!color_array[@]}; do
    echo $i - ${color_array[$i]}
done

以下是输出信息:

[root@localhost ~]# sh array_for2.sh 
0 - red
1 - yellow
2 - skyblue
3 - gray
4 - black
5 - white

如何在 bash 中使用索引数组

打印索引数组

如果要打印数组的内容,当然可以遍历数组,然后单独打印每个值。另一种更方便的方法是使用[@],返回数组的内容。

# color_array=(red yellow skyblue gray black white)
# echo ${color_array[@]}
red yellow skyblue gray black white

如何在 bash 中使用索引数组

根据数组索引对数组进行切片

bash 中的索引数组支持不同类型的数组切片,如下所示。

打印整个数组:

${my_array[@]}

数组切片的长度 len,从index 开始:

${my_array[@]:index:len}

数组切片的长度len,从索引 0 开始:

${my_array[@]::len}

数组切片从输入的索引值开始,到数组的结尾:

${my_array[@]:index}

查看以下 bash 数组切片示例以更好地了解其用法:

[root@localhost ~]# vim array_slice.sh
[root@localhost ~]# cat array_slice.sh 
#!/bin/bash
declare -a color_array=(red yellow skyblue gray black white pink purple)

# 获取整个数组
echo "Slice #1: ${color_array[@]}"

# 从索引 3 开始获取 2 个值
echo "Slice #2: ${color_array[@]:3:2}"

# 获取数组的前 5 个值
echo "Slice #3: ${color_array[@]::5}"

# 获取从索引 4 开始到结束的值
echo "Slice #4: ${color_array[@]:4}"

下面是运行脚本额之后获取的数据值:

[root@localhost ~]# sh array_slice.sh 
Slice #1: red yellow skyblue gray black white pink purple
Slice #2: gray black
Slice #3: red yellow skyblue gray black
Slice #4: black white pink purple

如何在 bash 中使用索引数组

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计2748字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7974502
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024 程序员】我劝你赶紧去免费领一个 AWS、华为云等的主机 每年 10 月 24 日,程序员们都会迎来...
亚马逊云崩完,微软云崩!当全球第二大云“摔了一跤”:Azure 宕机背后的配置风险与警示

亚马逊云崩完,微软云崩!当全球第二大云“摔了一跤”:Azure 宕机背后的配置风险与警示

亚马逊云崩完,微软云崩!当全球第二大云“摔了一跤”:Azure 宕机背后的配置风险与警示 首先来回顾一下 10...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

  300 元就能买到的 ” 小钢炮 ”?惠普 7L 四盘位小主机解析 最近...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...
12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换...