TranslateProject/published/202307/20230710.1 ⭐️ Bash Basics Series 5 Using Arrays in Bash.md
2023-07-31 22:27:30 +08:00

176 lines
5.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[#]: 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