[*]数组 是一种数据结构,用于存储某种类型的值。 您也可以将数组视为变量,但变量只能存储一个值,而数组可以在其中存储多个值。 数组的概念不仅限于 bash. 您使用的任何编程语言都将包含数组,但存在实现差异。
[*]Bash 支持两种类型的数组:
- 索引数组
- 关联数组
[*]索引数组是一种数组类型,其中存储元素(值)并分配一个整数,从 0 到 ñ. 使用索引号引用数组内的元素。 您将在下一篇文章中了解更多相关信息。 本文的主要重点只是索引数组。
如何在 Bash 中初始化索引数组
[*]使用数组的第一步是创建它。 术语 创建、定义、初始化数组 将互换使用,但指向相同的含义 – 创建数组。
[*]要创建数组,您应该使用括号并将数组元素(值)放在括号内。
$ arr1=( one 2 three 4 )
[*]需要注意的要点:
- Bash 数组可以存储不同数据类型的元素。 在某些编程语言中,您只能将值存储在相同类型的数组中。
- 数组中可以存储多少元素没有限制。 这取决于系统内存的可用性。
[*]你也可以使用 declare
命令与 -a
标志以创建索引数组。
$ declare -a arr1
$ arr1=( one 2 three 4 )
[*]或者,
$ declare -a arr1=( one 2 three 4 )
如何添加或查看数组的元素
[*]您可以创建一个包含值的数组,如上一节所示,或者只创建一个空数组并稍后添加值。 下面是如何创建一个空数组。
$ locations=()
[*]数组中的每个元素都有一个关联的索引值,从 0 到 ñ. 您必须使用索引位置将新元素添加到数组中。
$ locations[0]="Chennai"
$ locations[1]="Mumbai"
[*]这是将元素添加到数组的图形说明。
[*]要查看数组中的元素,可以使用以下任一语法。
$ echo ${locations[@]}
$ echo ${locations[*]}
[*]要了解 @ 和 * 之间的区别以及它如何与数组一起使用,请参阅我们的“循环数组元素”部分 Bash For 循环 指导。
[*]如果您尝试列出数组元素而不使用 @
或者 *
只会打印数组中的第一个元素。
$ echo ${locations}

[*]您可以使用其索引位置直接访问特定元素。
$ echo ${locations[1]}

数组的索引值
[*]在上一节中,我展示了如何使用索引位置在数组中添加元素。 当您使用索引位置添加数组时,您可以跳过并将元素添加到不同的索引位置。
[*]数组位置在位置中有两个元素 0 和 1. 现在我可以跳过索引 2 并添加到不同的索引位置。
$ locations[5]="Delhi"

[*]从上图中,您可以看到我在索引位置 5 的数组中添加了一个新元素。

[*]如果要打印元素的索引值,请在数组前面加上 "!"
如下符号:
$ echo ${!locations[@]}
[*]这只会打印索引值而不是打印元素。

[*]要打印索引和元素,请使用以下代码段。
for val in ${!locations[@]} do echo "index = ${val} , value = ${locations[$val]}" done

将值附加到数组
[*]您可以在不使用索引值的情况下将新元素添加到数组中,这会将元素附加到数组中。
locations=( Chennai Mumbai Delhi ) locations+=( Bangalore ) locations+=( Hyderabad )
$ echo ${locations[@]}
$ echo ${!locations[@]}

查找数组的长度
[*]您可以通过添加前缀来获取数组中有多少个元素 #
数组前的符号。
$ echo ${#locations[@]}

[*]使用相同的 #
符号,您还可以查找数组是否为空。
if [[ ${#locations[@]} -ne 0 ]]; then echo "Array is Not empty" else echo "Array is Empty" fi

从数组中删除元素
[*]要从数组中删除一个元素,您可以使用 unset
命令。 看看下面 example 在哪里使用 unset
从 index(2)
已移除。
$ echo ${locations[@]}
$ unset locations[2]
$ echo ${locations[@]}

删除数组
[*]要删除数组,您可以使用相同的 unset
命令。
$ unset locations
$ echo ${locations[@]}

清空数组
[*]有时您可能希望从数组中删除所有元素并保持数组为空。 在这种情况下,您可以简单地重新创建数组。
$ echo ${locations[@]}
Chennai Mumbai Delhi Hyderabad Bangalore
$ locations=()
$ echo ${locations[@]}

将命令输出存储为数组
[*]您可以运行任何命令并尝试将输出存储在数组中。 该命令应包含 括号 将输出存储为数组。
$ path_list=( $(echo $PATH | tr ":" "n") )
$ echo ${path_list[@]}

数组切片
[*]切片使您可以灵活地根据索引位置提取数组的某些元素。
[*]以下是切片的语法:
${locations[@]:index:length}
[*]如果您希望从特定的起始索引位置获取所有元素,则可以通过单独使用索引以下列方式进行。
$ echo ${locations[@]:index} # syntax
$ echo ${locations[@]:2}

[*]在上述 example,数组将从索引位置 2 开始打印,直到最后一个元素。 如果您指定长度和索引,那么它将使用以下公式对数组进行切片。
From index to index+length-1 (inclusive) # Formula
$ echo ${locations[@]:1:3}

[*]如果您跳过索引并单独给出长度,那么它将使用以下公式进行切片。
From Index 0 to length-1 (inclusive)
$ echo ${locations[@]::4}

结论
[*]在这篇文章中,我带你了解了 bash 索引数组. 当您开始编写复杂的代码时,数组非常重要 bash 脚本。 它们使您能够轻松地存储、检索和操作不同类型的数据。 与 python 等编程语言不同,没有内置的方法可以轻松地使用数组来执行一些复杂的任务,但仍然可以实现。
[*]在我们的下一个指南中,我们将讨论 关联数组 详细地。
- Bash 脚本——用示例解释的关联数组
[*]相关阅读:
- Bash 脚本 – While 和 until 循环用示例解释
- Bash 脚本——用例子解释的函数
- Bash 脚本——用例子解释的变量
- 用示例解释 Bash 重定向
- 用 Linux 中的示例解释 Bash Echo 命令
- Bash Heredoc 初学者教程