Bash 脚本——用示例解释索引数组

[*]数组 是一种数据结构,用于存储某种类型的值。 您也可以将数组视为变量,但变量只能存储一个值,而数组可以在其中存储多个值。 数组的概念不仅限于 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]}
在特定索引位置打印数组在特定索引位置打印数组

数组的索引值

[*]在上一节中,我展示了如何使用索引位置在数组中添加元素。 当您使用索引位置添加数组时,您可以跳过并将元素添加到不同的索引位置。

[*]数组位置在位置中有两个元素 01. 现在我可以跳过索引 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 在哪里使用 unsetindex(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 初学者教程