[#]: subject: "Bash Basics Series #5: Using Arrays in Bash" [#]: via: "https://itsfoss.com/bash-arrays/" [#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/" [#]: collector: "lkxed" [#]: translator: "geekpi" [#]: reviewer: "wxy" [#]: publisher: "wxy" [#]: url: "https://linux.cn/article-16016-1.html" Bash 基础知识系列 #5:在 Bash 中使用数组 ====== ![][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][1] > 🚧 `${` 之后或 `}` 之前不能有任何空格。你不能像 `${ array[n] }` 那样使用它。 ### 一次访问所有数组元素 假设你要打印数组的所有元素。 你可以一一使用 `echo ${array[n]}` 但这确实没有必要。有一个更好更简单的方法: ``` ${array[*]} ``` 这将为你提供所有数组元素。 ![Accessing all array elements at once in bash shell][2] ### 在 Bash 中获取数组长度 如何知道数组中有多少个元素? 有一个专门的方法 [在 Bash 中获取数组长度][3]: ``` ${#array_name[@]} ``` 就这么简单,对吧? ![Get array length in bash][4] ### 在 Bash 中添加数组元素 如果必须向数组添加其他元素,请使用 `+=` 运算符 [将元素追加到 Bash 中的现有数组][5]: ``` array_name+=("new_value") ``` 这是一个例子: ![Append new element to array][6] > 🚧 追加元素时使用 `()` 很重要。 你还可以使用索引将元素设置在任何位置。 ``` array_name[N]=new_value ``` **但请记住使用正确的索引编号。** 如果在现有索引上使用它,新值将替换该元素。 如果你使用“越界”索引,它仍会添加到最后一个元素之后。例如,如果数组长度为 6,并且你尝试在索引 9 处设置新值,则该值仍将作为最后一个元素添加到第 7 个位置(索引 6)。 ![][7] ### 删除数组元素 你可以使用 Shell 内置的 `unset` 通过提供索引号来删除数组元素: ``` unset array_name[N] ``` 这是一个示例,我删除了数组的第四个元素。 ![Delete array element in bash][8] 你还可以通过 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][a] 选题:[lkxed][b] 译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 [a]: https://itsfoss.com/author/abhishek/ [b]: https://github.com/lkxed/ [1]: https://itsfoss.com/content/images/2023/07/accessing-array-elements-bash.png [2]: https://itsfoss.com/content/images/2023/07/accessing-all-array-elements-bash.png [3]: https://linuxhandbook.com:443/array-length-bash/ [4]: https://itsfoss.com/content/images/2023/07/get-array-length-bash.png [5]: https://linuxhandbook.com:443/bash-append-array/ [6]: https://itsfoss.com/content/images/2023/07/append-element-to-array.png [7]: https://itsfoss.com/content/images/2023/07/add-array-element-bash-1.png [8]: https://itsfoss.com/content/images/2023/07/delete-array-element-bash.png [0]: https://img.linux.net.cn/data/attachment/album/202307/20/150302ttfmzchutthfcncm.jpg