Shell 脚本 101:Shell 脚本中的数组

[*]

[*]在之前的 shell 脚本教程中,我们使用了简单的 shell脚本中的变量. 今天我们将介绍 shell 脚本中的数组,以及如何在脚本中创建和使用数组。

[*]要动态声明或创建数组,我们将使用 declare 命令(更明确)或直接编写 array_name=(element1 element2 ...). 还有其他方法可以创建和访问数组,在本教程中,我们将尽可能详细地介绍。

什么是 Shell 脚本中的数组?

[*]变量可以存储单个值。 另一方面,数组可以在其中存储几乎无限的值,其中每个值都从索引 0 开始索引第一个值。

数组与常规变量图

[*]当您创建与大量值交互的脚本时,使用数组而不是创建大量单个变量更有效。

如何在 Shell 脚本中创建数组?

[*]我们可以声明一个关联或索引数组,然后分配值,或者直接使用这些值创建一个数组。 让我们看一个所有三种情况的例子。

[*]数组的格式为 数组名[subscript]=价值.

[*]要创建索引数组,我们将使用 declare 命令和 -一个 选项。 索引选项不需要您显式声明下标。 如果指定下标,则数组使用它。 不指定下标时,会自动索引从 0 开始的元素。

[email protected]:~# declare -a index_array [email protected]:~# index_array+=("first item") 
索引数组

[*]对于关联数组,我们将使用 -一个 声明命令的选项。 对于关联数组,我们需要明确指定下标是什么,否则我们会收到错误。

[email protected]:~# declare -A assoc_array [email protected]:~# assoc_array+=("first item") -bash: assoc_array: "first element": must use subscript when assigning associative array  [email protected]:~# assoc_array+=([first]="first item") 
无下标的关联数组无下标的关联数组

[*]如您所见,关联数组根本不会接受这些值,除非它们是在键值对中提供的。 但是您不需要事先声明一个数组。 您可以简单地将值分配给数组。

[*]现在让我们使用一个我们在不先声明名称的情况下动态分配值的数组。

[email protected]:~# array=("first item" "second item") [email protected]:~# array2=([first]="first item" [second]="second item") 
即时设置数组即时设置数组

[*]上述两个命令都是正确的,shell 脚本中的数组将根据提供的值自动“键入”到关联或索引数组。

输出数组值

[*]现在我们已经学习了如何在 shell 脚本中创建数组,让我们看看如何输出它们。 我们将继续使用 echo 命令来查看输出数组的不同方式。

[*]让我们对我们动态构建的数组变量使用 echo 命令: 大批. $ 表示法用于表示数组(请参阅关于 shell 脚本中的变量的文章以了解更多信息)

[email protected]:~# echo $array first item 

[*]如您所见,它只输出第一项。 但为什么会这样呢? 如果这是一个变量,我们将收到整个输出。

[*]它只输出第一项的原因是当我们在shell脚本中尝试输出数组时没有指定索引时,它会假设一个索引 [0]. 所以我们将指定 [@] 或者 [*].

[email protected]:~# echo ${array[@]} first item second item 

[*]现在您可能会注意到这里使用了大括号。 这些被用来明确提到从数组开始的整个部分到 [@] 都被视为一个。 如果我们不使用大括号,这就是输出。

不带括号的数组输出不带括号的数组输出

[*]说得通? 伟大的! 现在让我们继续前进。

[*]如何打印一系列元素? 我们可以通过使用索引部分对输出进行切片来轻松做到这一点。

[*] ${数组名[ELEMENTS-USUALLY JUST @ or *]:START-INDEX:NUMBER-OF-ELEMENTS}

[email protected]:~# echo ${array[@]:0:1} first item 

[*]如果我们删除 NUMBER-OF-ELEMENTS,输出将打印从 START-INDEX 开始的所有元素。

Shell 脚本中的各种数组操作

[*]我们可以用真正简单的命令计算、删除和替换数组中的项目。 让我们看看如何。

如何计算数组中的元素数

[*]有时我们可能需要知道在 shell 脚本中动态添加元素的数组元素的确切数量。 我将在我们之前用于打印整个数组的 echo 命令中添加一个井号/井号 (#)。 这将为我们提供数组中元素的数量。

[email protected]:~# echo ${#array[@]} 2 

[*]如您所知,我们的数组中有两个元素。

如何计算数组元素的字符数

[*]与上面的例子类似,如果我们改变 [@] 使用元素的索引,我们将获得作为字符数的输出。

[email protected]:~# echo ${#array[1]} 11 

替换数组中的特定字符

[*]在 shell 脚本中使用数组时,有时我们需要动态更改数组中的现有元素。 如同 查找和替换,我们可以对数组或数组元素中的特定字符或单词进行模式匹配和替换。 让我们将数组中的单词“item”替换为“ITEM”。

[email protected]:~# echo ${array[@]} first item second item [email protected]:~# echo ${array[@]//item/ITEM} first ITEM second ITEM 
正则表达式数组替换元素正则表达式数组替换元素

删除一个数组元素或整个数组

[*]在 shell 脚本中处理具有各种元素的多个数组时,有时您需要确保从脚本中删除值或整个数组。 要从数组中删除一个元素,我们将使用 未设置 命令并指定元素的索引。

[email protected]:~# echo ${array[@]} first item second item [email protected]:~# unset array[1] [email protected]:~# echo ${array[@]} first item 
取消设置数组元素取消设置数组元素

[*]如果您想删除 shell 脚本中的整个数组,可以使用不带索引的 unset 命令。

[email protected]:~# echo ${array[@]} first item [email protected]:~# unset array [email protected]:~# echo ${array[@]}  
取消设置完整数组取消设置完整数组

结论

[*]本教程应该可以帮助您在 shell 脚本中使用数组。 在以后的教程中,我们将介绍循环和条件,它们可以让您以更好的方式与数组交互。

[*]本文参考资料:[*]https://www.gnu.org/software/bash/manual/html_node/Arrays.html

[*]