Bash 数组

2025年3月17日 | 阅读 7 分钟

在本主题中,我们将演示 bash 数组的基础知识以及它们在 bash shell 脚本中的使用方法。

数组可以定义为类似类型元素的集合。与大多数编程语言不同的是,bash 脚本中的数组不必是类似元素的集合。由于 Bash 不区分字符串和数字,因此数组可能同时包含字符串和数字。

Bash 不支持多维数组;我们不能拥有本身就是数组的元素。Bash 支持一维数值索引数组和关联数组。要从最后一个元素访问数值索引数组,我们可以使用负索引。索引 '-1' 将被视为最后一个元素的引用。我们可以在一个数组中使用多个元素。

Bash 数组声明

Bash 中的数组可以通过以下方式声明

创建数值索引数组

我们可以将任何变量用作索引数组,而无需声明它。

要显式地将变量声明为 Bash 数组,请使用关键字“declare”,语法可以定义为

其中,

ARRAY_NAME 指示我们将分配给数组的名称。

注意:在 Bash 中命名变量的规则与命名数组的规则相同。

创建索引数组的一般方法可以定义如下

其中关键字“index”用于定义正整数。

创建关联数组

与数值索引数组不同,关联数组首先被声明。我们可以使用关键字“declare”和 -A(大写)选项来声明关联数组。语法可以定义为

创建关联数组的一般方法可以定义如下

其中 index_ 用于定义任何字符串。

我们也可以用以下方式编写上述形式

Bash 数组初始化

要初始化 Bash 数组,我们可以使用赋值运算符 (=),通过在括号内指定元素列表,用空格分隔,如下所示

注意:这里,第一个元素的索引为 0。此外,赋值运算符 (=) 周围不应有空格。

访问 Bash 数组的元素

要访问 Bash 数组的元素,我们可以使用以下语法

打印 Bash 数组

我们可以将关键字“declare”与“-p”选项一起使用,以打印 Bash 数组的所有元素及其所有索引和详细信息。打印 Bash 数组的语法可以定义为

数组操作

一旦数组被赋值,我们就可以对其执行一些有用的操作。我们可以显示它的键和值,也可以通过添加或删除元素来修改它

引用元素

要引用单个元素,我们需要知道元素的索引号。我们可以使用以下语法引用或打印任何元素

注意:需要使用大括号 ${} 来避免 shell 的文件名扩展运算符。

例如,让我们打印索引为 2 的数组元素

Bash 脚本

输出

Javatpoint

如果我们在指定的索引位置使用 @ 或 *,它将扩展到数组的所有成员。要打印所有元素,我们可以使用以下形式

Bash 脚本

输出

Welcome to Javatpoint

使用 @ 和 * 之间的唯一区别是,使用 @ 时,该形式被双引号括起来。在第一种情况(使用 @ 时),扩展为数组的每个元素提供一个单词的结果。可以通过“for 循环”更好地描述它。假设我们有一个包含三个元素的数组,"Welcome"、"To" 和 "Javatpoint"

使用 @ 应用循环

它将产生以下结果

Welcome
To
Javatpoint

应用带 * 的循环,将产生一个结果,该结果将数组的所有元素作为单个单词保存

Welcome To Javatpoint

理解 @ 和 * 的用法很重要,因为它在使用该形式遍历数组元素时很有用。

打印数组的键

我们还可以检索并打印索引或关联数组中使用的键,而不是它们各自的值。可以通过在数组名称之前添加 ! 运算符来执行此操作,如下所示

示例

输出

0  1  2

查找数组长度

我们可以使用以下形式计算数组中包含的元素数量

示例

输出

The array contains 3 elements

循环遍历数组

遍历数组中每个元素的一般方法是使用“for 循环”。

示例

输出

Bash Array

循环遍历数组的另一种常用方法是检索数组的长度并使用 C 风格的循环

Bash 脚本

输出

Bash Array

向数组添加元素

我们可以选择通过分别指定它们的索引或关联键来将元素添加到索引或关联数组中。要在 bash 中向数组添加新元素,我们可以使用以下形式

示例

输出

Java Python PHP HTML JavaScript

向数组添加新元素的另一种方法是使用 += 运算符。在这种方法中,无需指定索引。我们可以使用以下方式在数组中添加一个或多个元素

示例

输出

Java Python PHP JavaScript CSS SQL

更新数组元素

我们可以通过为其索引值向现有数组分配新值来更新数组元素。让我们使用元素“Javatpoint”更改索引 4 处的数组元素。

示例

输出

We welcome you on Javatpoint

从数组中删除元素

如果我们要从数组中删除元素,我们必须知道它的索引或关联数组的情况下的键。可以使用“unset”命令删除元素

下面显示了一个示例,以便您更好地理解这个概念

示例

输出

Java HTML CSS JavaScript

在这里,我们创建了一个由五个元素组成的简单数组,“Java”、“Python”、“HTML”、“CSS”和“JavaScript”。然后,我们通过使用“unset”并引用它的索引从数组中删除了元素“Python”。元素“Python”的索引为“1”,因为 bash 数组从 0 开始。如果我们删除元素后检查数组的索引,我们可以看到已删除元素的索引丢失了。我们可以通过在脚本中添加以下命令来检查索引

输出将如下所示

0 2 3 4

这个概念也适用于关联数组。

删除整个数组

删除整个数组是一个非常简单的任务。可以通过将数组名称作为参数传递给“unset”命令来执行此操作,而无需指定索引或键。

示例

输出

Bash Array

如果我们尝试打印上述脚本的内容,将没有输出。将返回一个空结果,因为数组不再存在。

切片数组元素

Bash 数组也可以从给定的起始索引切片到结束索引。

要从起始索引 'm' 切片到结束索引 'n' 的数组,我们可以使用以下语法

示例

输出

Bash Array
下一个主题Bash 读取文件