Shell 脚本中的数组

0 股票
0
0
0
0

介绍

了解如何在 shell 脚本中使用数组,将有助于您高效地处理大型数据集。但是,什么是数组?如何创建数组?让我们一起来了解一下。.

什么是数组?

如果你已经对任何编程语言有了基本的了解,那么你肯定知道数组是什么。但对于那些不熟悉数组的人来说,让我们一起来回顾一下数组的基础知识,并学习如何使用它们。.

变量存储单个数据元素。而数组则可以存储几乎无限数量的数据元素。处理大量数据时,变量效率会非常低下,而使用数组则非常有用。.

让我们学习如何在 shell 脚本中创建数组。.

在 shell 脚本中创建数组

在 shell 脚本中,我们可以处理两种类型的数组。.

  • 索引数组——存储索引从0开始的元素。
  • 关联数组——以键值对的形式存储元素

默认创建的数组是索引数组。如果指定索引名称,它将变成关联数组,可以使用索引名称而不是数字来访问元素。.

声明数组:

root@ubuntu:~# declare -A assoc_array
root@ubuntu:~# assoc_array[key]=value
OR
root@ubuntu:~# declare -a indexed_array
root@ubuntu:~# indexed_array[0]=value

注意大写字母 A 和小写字母 a。大写字母 A 用于声明关联数组,而小写字母 a 用于声明索引数组。.

`declare` 关键字用于显式声明数组,但实际上并非必须使用。创建数组时,只需根据所需的数组类型初始化值即可,无需显式声明数组。.

在 shell 脚本中使用数组

既然你已经知道如何创建数组,接下来我们来学习如何使用数组。由于数组是数据元素的集合,我们可以同时使用循环和数组来提取所需的数据点。.

1. 单独访问数组元素

由于我们知道每个数据点都有单独的索引,因此我们可以通过指定数组索引来访问数组中的所有元素,如下所示:

assoc_array[element1]="Hello World"
echo ${assoc_array[element1]}

类似地,我们来访问索引数组中的一些元素。我们可以用空格分隔索引数组中的所有元素,因为每个元素的索引都是自动生成的。.

index_array=(1 2 3 4 5 6)
echo ${index_array[0]}

如您所见,第一个元素会自动打印在索引 0 处。.

2. 顺序读取数组元素

如果您已经了解循环,这将很容易。如果您不了解,我们将在以后的教程中讲解。我们将使用 shell 脚本中的 while 或 for 循环来操作数组元素。复制以下脚本并将其保存为保存 .sh

#!/bin/bash
index_array=(1 2 3 4 5 6 7 8 9 0)
for i in ${index_array[@]}
do
echo $i
done

上述脚本将输出以下结果:

现在你可能已经注意到 index_array[@],如果你想知道 @ 符号是做什么用的,我们现在就来解释一下。.

shell脚本中数组的内置操作

既然你已经学会了如何单独访问元素和使用 for 循环,那么让我们来学习数组默认可用的各种操作。.

1. 访问数组的所有元素

我们学习了如何通过提供索引或数组键来访问元素。但如果我们想一次性打印所有元素或对所有元素进行操作,我们可以使用另一个运算符,即 [@] 符号。.

正如你在上面的例子中看到的,当我想用 for 循环遍历数组的所有元素时,我使用了这个符号。.

echo ${assoc_array[@]}

以上代码会打印出 assoc 数组中存储的所有元素。.

2. 计算数组中元素的个数

与上面的 @ 符号类似,我们还有符号 #,它可以作为数组名称的前缀,表示数组中存储的元素数量。让我们看看它是如何工作的。.

echo ${#index_array[@]}

如果要统计某个元素使用的字符数,只需将 @ 符号替换为索引即可。.

3. 删除单个数组元素

我们知道如何向数组中添加元素并打印它们。接下来,我们来学习如何删除指定的元素。为此,我们使用 unset 关键字。.

unset index_array[1]

替换上面代码示例中的数组名称和索引 ID,即可删除所需的数组元素。很简单,对吧?

结果

Shell 脚本功能非常强大,只要编写得当,几乎可以替代你在终端中执行的任何操作。Shell 脚本中数组的一些额外功能还包括使用正则表达式。我们可以使用各种正则表达式来操作 Shell 脚本中的数组元素。.

现在,我们希望您已经对创建和使用数组有了充分的了解,并且能够在脚本中使用数组。请在下方留言分享您的想法,如果您对此主题有任何疑问,也请告诉我们。.

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

您可能也喜欢