数组是最常用的基本数据结构之一。您可以认为数组是一个可以在其中存储多个变量的变量。

在本文中,我们将借助示例讨论Bash数组,以及如何在Bash脚本中使用它们。

bash数组

Bash支持一维数字索引和关联数组类型。数字数组使用整数引用,而关联数组使用字符串引用。索引不必是连续的。

可以使用负索引从末尾访问数字索引数组,负索引是-1对最后一个元素的引用。

与大多数编程语言不同,Bash数组元素不必具有相同的数据类型。您可以创建一个同时包含字符串和数字的数组。Bash不支持多维数组,并且您不能同时使用数组元素。

数组中可以存储的最大元素数没有限制。

创建Bash数组

Bash中的数组可以用不同的方式初始化。

创建数字索引数组

Bash变量是无类型的,任何变量都可以在不声明的情况下用作索引数组。

要显式声明数组,请使用内置的声明:

declare -a array_name

创建索引数组的一种方法是使用以下形式:

array_name[index_1]=value_1
array_name[index_2]=value_2
array_name[index_n]=value_n

index_是正整数。

创建数字数组的另一种方法是在括号内指定元素列表,并用空格隔开:

array_name=( element_1 element_2 element_N )

当使用上述形式创建数组时,索引从零开始,即第一个元素的索引为0

创建关联数组

与数字索引不同,关联数组必须首先使用clarify Builtin和-A(大写)选项声明:

declare -A array_name

要创建关联数组,请使用以下形式:

declare -A array_name

array_name[index_foo]=value_foo
array_name[index_bar]=value_bar
array_name[index_xyz]=value_xyz

index_可以是任何字符串。

您还可以使用以下形式创建关联数组:

declare -A array_name

array_name=( 
  [index_foo]=value_foo 
  [index_bar]=value_bar 
  [index_xyz]=value_xyz 
)

数组运算

Bash数组语法起初可能看起来有些奇怪,但是一旦您阅读本文,它就会变得更有意义。

引用元素

要引用单个元素,您需要知道元素索引。可以使用以下格式引用任何元素:

${array_name[index]}
使用数组时,${}需要使用花括号来避免shell的文件名扩展运算符。
如果不使用花括号,${}则用于访问数组元素的语法与大多数编程语言的语法相似。

让我们打印索引为的元素1

## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## print element
echo ${my_array[1]}
Helium

如果指定的索引为@*,则单词将扩展为数组的所有成员。要打印所有元素,请使用:

## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## print all elements
echo "${my_array[@]}"
Hydrogen Helium Lithium Beryllium

@或之间的唯一区别*是,${my_array[x]}用双引号引起来。在这种情况下,*扩展为单个单词,其中数组元素之间用空格分隔,然后@将每个数组元素扩展为单独的单词。当遍历数组元素时,这一点尤其重要。

您还可以通过!在数组名称之前添加运算符来打印数组的键:

${!array_name[index]}

例如,要打印所有键,请使用:

## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## print all elements
echo "${!my_array[@]}"
0 1 2 3

数组长度

要获取数组的长度,请使用以下形式:

${#array_name[@]}

语法与引用所有元素以及#数组名称前的字符时的语法相同。

## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## array Length
echo ${#my_array[@]}
4

遍历数组

遍历数组中每个项目的最常见方法是使用for循环

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## Array Loop
for i in "${my_array[@]}"
do 
  echo "$i"
done

上面的代码将遍历数组,并在新行中打印每个元素:

Hydrogen
Helium
Lithium
Beryllium

打印所有键和值的示例

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## Array Loop
for i in "${!my_array[@]}"
do
  echo "$i" "${my_array[$i]}"
done
0 Hydrogen
1 Helium
2 Lithium
3 Beryllium

遍历数组的另一种方法是获取数组的长度并使用C样式循环:

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

# Length of the array
length=${#my_array[@]}

# Array Loop
for (( i=0; i < ${length}; i++ ))
do
  echo $i ${my_array[$i]}
done
0 Hydrogen
1 Helium
2 Lithium
3 Beryllium

添加一个新元素

要将新元素添加到bash数组并指定其索引,请使用以下形式:

my_array[index_n]="New Element"

这是一个例子:

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## add new element
my_array[9]="Aluminum"

## print all elements
echo "${my_array[@]}"
Hydrogen Helium Lithium Beryllium Aluminum

在不指定索引的情况下将新元素添加到数组的另一种方法是使用+=运算符。您可以添加一个或多个元素:

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## add new elements
my_array+=( Cobalt Nickel )

## print all elements
echo "${my_array[@]}"
Hydrogen Helium Lithium Beryllium Cobalt Nickel

删除元素

要删除单个元素,您需要知道元素索引。可以使用以下unset命令删除元素:

unset my_array[index]

让我们来看一个例子:

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## remove element
unset my_array[2]

## print all elements
echo "${my_array[@]}"
Hydrogen Helium Beryllium

结论

到目前为止,您应该已经对如何使用bash数组有了很好的了解。我们已经向您展示了如何创建数字索引和关联数组,如何遍历数组,计算数组长度以及添加和删除元素。

如果您有任何问题或反馈,请随时发表评论。

如果你喜欢我们的内容可以选择在下方二维码中捐赠我们,或者点击广告予以支持,感谢你的支持