Bash 基础知识系列 #5:在 Bash 中使用数组
创始人
2024-03-02 16:26:41
0

本章将介绍如何在 Bash Shell 脚本中使用数组。学习添加元素、删除元素和获取数组长度。

在本系列的前面部分中,你了解了变量。变量中可以有单个值。

数组内部可以有多个值。当你必须一次处理多个变量时,这会使事情变得更容易。你不必将各个值存储在新变量中。

因此,不要像这样声明五个变量:

distro1=Ubuntu
distro2=Fedora
distro3=SUSE
distro4=Arch Linux
distro5=Nix

你可以在单个数组中初始化它们所有:

distros=(Ubuntu Fedora SUSE "Arch Linux" Nix)

与其他一些编程语言不同,你不使用逗号作为数组元素分隔符。

那挺好的。让我们看看如何访问数组元素。

在 Bash 中访问数组元素

使用索引(数组中的位置)访问数组元素。要访问索引 N 处的数组元素,请使用:

${array_name[N]}

? 与大多数其他编程语言一样,Bash Shell 中的数组从索引 0 开始。这意味着第一个元素的索引为 0,第二个元素的索引为 1,第 n 个元素的索引为 n-1

因此,如果你想打印 SUSE,你将使用:

echo ${distros[2]}

Example of accessing array elements in bash shell

? ${ 之后或 } 之前不能有任何空格。你不能像 ${ array[n] } 那样使用它。

一次访问所有数组元素

假设你要打印数组的所有元素。

你可以一一使用 echo ${array[n]} 但这确实没有必要。有一个更好更简单的方法:

${array[*]}

这将为你提供所有数组元素。

Accessing all array elements at once in bash shell

在 Bash 中获取数组长度

如何知道数组中有多少个元素? 有一个专门的方法 在 Bash 中获取数组长度

${#array_name[@]}

就这么简单,对吧?

Get array length in bash

在 Bash 中添加数组元素

如果必须向数组添加其他元素,请使用 += 运算符 将元素追加到 Bash 中的现有数组

array_name+=("new_value")

这是一个例子:

Append new element to array

? 追加元素时使用 () 很重要。

你还可以使用索引将元素设置在任何位置。

array_name[N]=new_value

但请记住使用正确的索引编号。 如果在现有索引上使用它,新值将替换该元素。

如果你使用“越界”索引,它仍会添加到最后一个元素之后。例如,如果数组长度为 6,并且你尝试在索引 9 处设置新值,则该值仍将作为最后一个元素添加到第 7 个位置(索引 6)。

删除数组元素

你可以使用 Shell 内置的 unset 通过提供索引号来删除数组元素:

unset array_name[N]

这是一个示例,我删除了数组的第四个元素。

Delete array element in bash

你还可以通过 unset 来删除整个数组:

unset array_name

? Bash 中没有严格的数据类型规则。你可以创建一个同时包含整数和字符串的数组。

?️ 练习时间

让我们练习一下你所学到的有关 Bash 数组的知识。

练习 1:创建一个 Bash 脚本,其中包含五个最佳 Linux 发行版的数组。全部打印出来。

现在,用 “Hannah Montanna Linux” 替换中间的选择。

练习 2:创建一个 Bash 脚本,该脚本接受用户提供的三个数字,然后以相反的顺序打印它们。

预期输出:

Enter three numbers and press enter
12 23 44
Numbers in reverse order are: 44 23 12

我希望你喜欢通过本系列学习 Bash Shell 脚本。在下一章中,你将学习如何使用 if-else。敬请关注。

(题图:MJ/09477e2f-2bf9-4fdf-bc1e-c894a068adf2)


via: https://itsfoss.com/bash-arrays/

作者:Abhishek Prakash 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

开启“零门槛”AI视频创作...
随着移动端的普及和数字化技术的成熟,短视频创作内容不仅逐渐向各行各...
2025-07-11 14:12:34
编写CentOS系统下的B...
面对重复繁琐的服务器操作,手动输入命令效率低下且易出错。为了解决这...
2025-06-15 08:43:24
怎么用AI做短视频赚钱?小...
嘿,你是不是也刷到过那些爆火的短视频,心想:“这玩意儿咋这么赚钱?...
2025-06-06 22:12:18
Hadoop集群---方便...
目录 为什么编写脚本? myhadoop.sh 群...
2025-05-31 15:38:00
如何防止xss跨站脚本攻击...
XSS(跨站脚本)攻击是一种常见的网络...
2025-05-30 17:35:21
shell命令如何正确调用...
前言 本文是该专栏的第20篇,后面会持续分享python的各种干...
2025-05-29 06:53:20

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
从 Yum 更新中排除特定/某... 作为系统更新的一部分,你也许需要在基于 Red Hat 系统中由于应用依赖排除一些软件包。如果是,如...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...
如何检查你的 Linux 系统... 不知道在使用哪个初始化系统?以下是方法。每个主流 Linux 发行版(包括 Ubuntu、Fedor...