如何在Bash中使用数组

524 阅读4分钟

在任何编程语言中,当你想使用单个变量使用多个数据时,你必须使用数组变量。数据列表可以使用数组变量进行分配和使用。Bash是一种弱类型的语言,不需要为声明变量而定义任何数据类型。Bash中的数组声明与其他标准的编程语言有一点不同。在bash中可以声明两种类型的数组。 数值数组和关联数组。如果一个数组的索引是数字,那么它被称为数字数组,如果一个数组的索引是字符串,它被称为关联数组。本教程通过实例描述了如何声明数字数组、关联数组,以及如何使用for循环迭代数组中的元素。

例1:数字数组声明。

数组的默认索引是数字,所有的值都被当作字符串值。这里声明了一个包含5个字符串值的简单数字数组。这里使用echo命令来分别打印每个数组的值。如果你想通过单个echo 命令打印所有的数组值,那么必须在数组的索引中使用 "*"符号。用下面的脚本创建一个bash文件,显示在bash脚本中声明一个数组的两种方法。

#!/bin/bash
MyArray=(HTML Javascript CSS JQuery Bootstrap)

# 单独打印5个值

echo "---------- 单独打印5个值---------------"
echo {MyArray\[0\]} echo {MyArray[1]}
echo {MyArray\[2\]} echo {MyArray[3]}
echo ${MyArray[4]}

#通过使用*打印所有数值
echo "-----------------打印所有数值-------------------"
echo ${MyArray[*]}

输出。

执行上述脚本后会出现以下输出。

例2:关联数组声明。

在关联数组中,数组的每个索引都需要单独声明。用下面的脚本创建一个bash文件来了解关联数组在bash中的使用。在下面的例子中声明了一个4个元素的关联数组。像前面的例子一样,可以通过分别使用每个索引来打印该数组的值。只有关联数组的索引可以通过使用"!"和"@"符号来打印。

#!/bin/bash

# 关联数组声明
declare -AMyArr

# 值初始化
MyArr=( [mark]=79 [john]=93 [ella]=87 [mila]=83 )

# 打印数值
echo {MyArr\[mark\]} echo {MyArr[john]}
echo {MyArr\[ella\]} echo {MyArr[mila]}

# 打印索引

echo ${!MyArr[@]}

输出。

执行上述脚本后会出现以下输出。

Example-3: 使用for循环读取数组值:

任何bash数组的元素总数都可以通过使用下面例子第一部分中的**"#""*"** 符号来计算。用下面的脚本创建一个bash文件,了解使用循环读取数组值的方法。For 循环通常用于遍历数组的值。你也可以通过使用for循环分别读取数组值和数组索引。在下面的例子中使用了不同的循环来读取数组索引,数组值,以及两者。

#!/bin/bash

# 关联数组声明
declare -AMyArr

# 值初始化
MyArr=( [os]=Windows[web]=PHP[db]=Oracle)

echo "元素的总数=${#MyArr[*]}"

echo "Array values are"
forvaluein {MyArr\[@\]} do echo value
done

echo "Array indexes are"
forkeyin {!MyArr\[@\]} do echo key
done

echo "Array values and indexes:"
forkeyin {! MyArr\[\*\]} do echo "key=>{MyArr\[key]}"
done

输出:
执行上述脚本后会出现以下输出。

例4:向数组中添加元素

新的元素可以通过不同的方式添加到数组中。在这个例子中显示了使用速记操作符(+=)添加一个或多个元素的方法。用下面的脚本创建一个bash文件,以了解如何将新元素插入数组中。

#!/bin/bash

# 声明一个数字数组
declare -aMyArr

# 用两个元素初始化数组
MyArr=(Ubuntu CentOS)

# 打印元素总数
echo "Total number of elements of the current array=${#MyArr[*]}"

# 添加一个元素
MyArr+=(Fedora)

# 添加一个元素后打印元素总数
echo "添加一个元素后的元素总数=${#MyArr[*]}"

# 添加两个元素
MyArr+=(RedHat LinuxMint)

# 打印添加两个元素后的元素总数
echo "添加两个元素后的元素总数=${#MyArr[*]}"

# 打印数组的所有元素
echo "数组元素是:"
echo "${MyArr[@]}"

输出。

执行上述脚本后会出现以下输出.

例5:从数组中删除一个元素

`unset`命令用来从数组中删除一个或全部元素.用下面的脚本创建一个bash文件,以了解如何从一个数字数组中删除一个和所有的元素。

#!/bin/bash
# 声明一个数字数组
declare -aMyArr

# 用两个元素初始化数组
MyArr=(Dell HP Lenavo Acer Asus Avita)

# 打印元素总数
echo "Total number of elements of the current array=${#MyArr[*]}"

# 删除前打印数组数值
echo "Array values before delete:"
echo "${MyArr[@]}"

# 删除第四个元素
unsetMyArr[3]

# 删除一个元素后打印元素总数
echo "删除一个元素后元素总数=${#MyArr[*]}"

# 删除后打印阵列值
echo "删除一个元素后阵列值:"
echo "${MyArr[@]}"

# 删除所有元素
unsetMyArr

# 删除所有元素后打印数组值
echo "删除所有元素后数组值:"
echo "${MyArr[@]}"

输出。

执行上述脚本后会出现以下输出。

例6:打印多个单词的字符串值

数组的值需要用双引号("")括起来,以便将多个单词的字符串值添加到一个数组中。用下面的脚本创建一个bash文件,其中一个相关的数组已经初始化为多个单词的字符串值。

#!/bin/bash

# 声明一个关联数组
declare -AMyArr

# 用多个单词的字符串值初始化数组
MyArr=([cse-101]="计算机基础 " [cse-207]="Java编程 " [cse-312]="网络编程")

# 打印多个单词的数组值
echo "数组值是。"
forvalin "{MyArr\[@\]}";do echo val
done

输出。

执行上述脚本后会出现以下输出。

结论。

数组在编程中被用于许多目的。本教程中已经展示了数组在bash中的一些常见和非常简单的用途。在练习了上面的例子之后,bash数组的基本概念对于bash用户来说将被清除,他们将能够在他们的脚本中适当地使用bash数组。