bash使用数组

本文概述

  • Bash数组声明
  • Bash阵列初始化
  • Bash数组的访问元素
  • 打印Bash阵列
  • 阵列运算
在本主题中,我们将演示bash数组的基础知识以及如何在bash shell脚本中使用它们。
数组可以定义为相似类型元素的集合。与大多数编程语言不同,bash脚本中的数组不必是相似元素的集合。由于Bash不能将字符串与数字区分开,因此数组可以同时包含字符串和数字。
Bash不支持多维数组。我们本身不能具有数组元素。 Bash支持一维数字索引数组以及关联数组。要从最后一个访问数字索引数组,我们可以使用负索引。索引“ -1”将被视为最后一个元素的参考。我们可以在数组中使用几个元素。
Bash数组声明Bash中的数组可以通过以下方式声明:
【bash使用数组】创建数字索引数组
我们可以在不声明变量的情况下将任何变量用作索引数组。
要将变量显式声明为Bash数组,请使用关键字“ declare”,并且语法可以定义为:
declare -a ARRAY_NAME

哪里,
ARRAY_NAME表示我们将分配给数组的名称。
注意:在Bash中命名变量的规则与命名数组相同。创建索引数组的一般方法可以按以下形式定义:
ARRAY_NAME[index_1]=value_1 ARRAY_NAME[index_2]=value_2 ARRAY_NAME[index_n]=value_n

其中关键字“ index”用于定义正整数。
创建关联数组
与数字索引数组不同,关联数组是首先声明的。我们可以使用关键字“ declare”和-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_NAMEARRAY_NAME=( [index_foo]=value_foo [index_bar]=value_bar [index_xyz]=value_xyz )

Bash阵列初始化要初始化Bash数组,我们可以使用赋值运算符(=),方法是指定括号内的元素列表,并用空格分隔,如下所示:
ARRAY_NAME=(element_1st element_2nd element_Nth)

注意:这里,第一个元素的索引为0。此外,赋值运算符(=)周围不应有空格。Bash数组的访问元素要访问Bash数组的元素,我们可以使用以下语法:
echo ${ARRAY_NAME[2]}

打印Bash阵列我们可以使用带有’ -p’ 选项的关键字’ declare’ 来打印带有所有索引和详细信息的Bash数组的所有元素。打印Bash数组的语法可以定义为:
declare -p ARRAY_NAME

阵列运算分配数组后,我们可以对其执行一些有用的操作。我们可以显示其键和值,也可以通过添加或删除元素来对其进行修改:
参考元素
要引用单个元素,我们需要知道该元素的索引号。我们可以使用以下语法引用或打印任何元素:
${ARRAY_NAME[index]}

注意:需要使用花括号$ {}来避免shell的文件名扩展运算符。例如,让我们打印一个索引为2的数组元素:
Bash脚本
#!/bin/bash #Script to print an element of an array with an index of 2#declaring the array declare -a example_array=( "Welcome""To""srcmini" )#printing the element with index of 2 echo ${example_array[2]}

输出量
srcmini

如果我们在指定的索引处使用@或*,它将扩展到数组的所有成员。要打印所有元素,我们可以使用以下形式:
Bash脚本
#!/bin/bash #Script to print all the elements of the array#declaring the array declare -a example_array=( "Welcome""To""srcmini" )#Printing all the elements echo "${example_array[@]}"

输出量
Welcome to srcmini

使用@和*之间的唯一区别是,使用@时,表格用双引号引起来。在第一种情况下(使用@时),扩展为数组的每个元素提供了一个单词的结果。可以借助“ for循环”更好地描述它。假设我们有一个包含三个元素的数组:“欢迎”,“收件人”和“ srcmini”:
$ example_array= (Welcome to srcmini)

使用@施加循环:
for i in "${example_array[@]}"; do echo "$i"; done

它将产生以下结果:
Welcome To srcmini

应用带*的循环,将产生单个结果,将数组的所有元素都保存为一个单词:
Welcome To srcmini

了解@和*的用法很重要,因为在使用表单迭代数组元素时,它很有用。
打印阵列的键
我们还可以检索和打印在索引或关联数组中使用的键,而不是它们各自的值。可以通过添加!来执行。数组名称前的运算符如下:
${!ARRAY_NAME[index]}


#!/bin/bash #Script to print the keys of the array#Declaring the Array declare -a example_array=( "Welcome""To""srcmini" )#Printing the Keys echo "${!example_array[@]}"

输出量
012

查找数组长度
我们可以使用以下形式来计算数组中包含的元素数:
${#ARRAY_NAME[@]}


#!/bin/bash#Declaring the Array declare -a example_array=( "Welcome""To""srcmini" )#Printing Array Length echo "The array contains ${#example_array[@]} elements"

输出量
The array contains 3 elements

遍历数组
遍历数组中每个项目的通用方法是使用“ for循环”。

#!/bin/bash #Script to print all keys and values using loop through the arraydeclare -a example_array=( "Welcome""To""srcmini" )#Array Loop for i in "${!example_array[@]}" do echo The key value of element "${example_array[$i]}" is "$i" done

输出量
bash使用数组

文章图片
遍历数组的另一种常见方法是检索数组的长度并使用C样式的循环:
Bash脚本
#!/bin/bash #Script to loop through an array in C-styledeclare -a example_array=( "Welcome""To""srcmini" )#Length of the Array length=${#example_array[@]}#Array Loop for (( i=0; i < ${length}; i++ )) do echo $i ${example_array[$i]} done

输出量
bash使用数组

文章图片
将元素添加到数组
我们可以选择通过分别指定元素的索引或关联键将元素添加到索引或关联数组。要将新元素添加到bash中的数组中,我们可以使用以下形式:
ARRAY_NAME[index_n]="New Element"


#!/bin/bash#Declaring an array declare -a example_array=( "Java""Python""PHP""HTML" )#Adding new element example_array[4]="JavaScript"#Printing all the elements echo "${example_array[@]}"

输出量
Java Python PHP HTML JavaScript

向数组添加新元素的另一种方法是使用=运算符。无需在此方法中指定索引。我们可以使用以下方式在数组中添加一个或多个元素:

#!/bin/bash#Declaring the Array declare -a example_array=( "Java""Python""PHP" )#Adding new elements example_array+=( JavaScript CSS SQL )#Printing all the elements echo "${example_array[@]}"

输出量
Java Python PHP JavaScript CSS SQL

更新数组元素
我们可以通过按索引值为现有数组分配新值来更新数组元素。让我们使用元素“ srcmini”更改索引4处的数组元素。

#!/bin/bash #Script to update array element#Declaring the array declare -a example_array=( "We""welcome""you""on""SSSIT" )#Updating the Array Element example_array[4]=srcmini#Printig all the elements of the Array echo ${example_array[@]}

输出量
We welcome you on srcmini

从数组中删除元素
如果要从数组中删除元素,则在关联数组的情况下必须知道其索引或键。可以使用’ unset’ 命令删除元素:
unset ARRAY_NAME[index]

下面显示了一个示例,以使你更好地理解此概念:

#!/bin/bash #Script to delete the element from the array#Declaring the array declare -a example_array=( "Java""Python""HTML""CSS""JavaScript" )#Removing the element unset example_array[1]#Printing all the elements after deletion echo "${example_array[@]}"

输出量
Java HTML CSS JavaScript

在这里,我们创建了一个简单的数组,其中包含五个元素:“ Java”,“ Python”,“ HTML”,“ CSS”和“ JavaScript”。然后,通过使用“未设置”并引用其索引从数组中删除“ Python”元素。元素“ Python”的索引为’ 1’ ,因为bash数组从0开始。如果我们在删除元素后检查数组的索引,我们会看到所删除元素的索引丢失了。我们可以通过在脚本中添加以下命令来检查索引:
echo ${!example_array[@]}

输出将如下所示:
0 2 3 4

这个概念也适用于关联数组。
删除整个数组
删除整个数组是一个非常简单的任务。可以通过将数组名称作为参数传递给’ unset’ 命令来执行,而无需指定索引或键。

#!/bin/bash #Script to delete the entire Array#Declaring the Array declare -a example_array=( "Java""Python""HTML""CSS""JavaScript" )#Deleting Entire Array unset example_array#Printing the Array Elements echo ${!example_array[@]}#Printing the keys echo ${!example_array[@]}

输出量
bash使用数组

文章图片
如果我们尝试打印上述脚本的内容,将没有输出。返回空结果,因为数组不再存在。
切片数组元素
Bash数组也可以从给定的起始索引切成结束索引。
要将数组从起始索引’ m’ 切到结束索引’ n’ ,我们可以使用以下语法:
SLICED_ARRAY=(${ARRAY_NAME[@]:m:n}")


#!/bin/bash #Script to slice Array Element from index 1 to index 3#Declaring the Array example_array=( "Java""Python""HTML""CSS""JavaScript" )#Slicing the Array sliced_array=("${example_array[@]:1:3}")#Applying for loop to iterate over each element in Array for i in "${sliced_array[@]}" do echo $i done

输出量
bash使用数组

文章图片

    推荐阅读