Bash中如何在创建数组时声明其为空

259 阅读3分钟

数组是一个存储类似数据类型的值的容器。存储过程中处理的是在数组的任何索引上输入数值,数组的索引访问该数值。每当你声明一个数组时,你有两个选择。要么在声明时分配数值,要么在需要时动态地输入数值。在本指南中,我们体验了这两种方法。为了在bash中执行这个功能,你需要创建一个Linux操作系统的环境,在那里你可以访问终端和其他用户权限的应用程序。

为了在bash中执行对阵列的操作,你需要在Linux操作系统中安装bash。通过安装软件包,它已经被安装在系统中了。bash的版本应该大于4才能继续本指南的内容。如果小于4,你需要安装最新的bash版本或至少4。在Linux终端上执行命令来检查版本。

$ bash --version

从结果来看,你会发现bash的版本是5.0.17。这意味着我们可以用bash对数组进行操作。

例子1

要声明一个空数组,这里给出了最简单的方法。它包含关键字 "declaration",后面是常量"-a "和数组名称。数组的名称是用空括号指定的。在终端上运行这个命令。

$ declare –a array2=()

这就是用一条命令声明一个空数组的方法。大多数情况下,空数组不被认为是有价值的,因为它们不承担任何价值,只是占据空间,特别是当你在声明时或在运行时动态地定义数组的大小。

例2

在声明了一个空数组之后, 你现在可以保证那里没有任何项目.用第一个例子中提到的方法来声明这个数组。

$ declare –a arr1

现在你可以通过打印数组来检查该数组。打印是通过索引号进行的。没有任何值。要打印所有的数组值,我们用'@'或'*'符号来代替索引号。

$ printf ${#arr1[@]}

"#"意味着特定索引中的值的数量。如果你想直接显示数值,就没有必要在数组的名称上使用哈希符号。

例3

在这个例子中,我们必须使用if-else语句来对数组施加条件。数组的创建是先进行的。这是一种不同的数组创建方法。

$ array=()

与前面的例子不同,我们没有使用 "声明 "关键字来创建和初始化数组。这种方法很简单,因为数组的名称直接被分配到空括号中。这意味着没有赋值。现在通过if-else语句检查数组。这里只使用了 "if "部分;你也可以使用语句的 "else "部分。

$ if ! (( ${#array[@]} > 0)); then echo “array is empty”; fi

整个语句写在一行中。它表示如果索引在0的位置,那么数组就是空的。所以会显示相应的信息,也就是 "数组为空"。

例4

又一次使用了if-else语句。但是这一次,我们在语句中同时使用了两个部分。if "部分只有在数组是空的情况下才会起作用,但如果数组是满的或者有一些值,那么这部分就会显示出来。一个名为 "错误 "的数组。我们已经暂时填充了这个数组,以检查工作情况。现在我们将使用该语句。这里'eq'作为等号被利用。

$ if [ ${#errors[@]} -eq 0 ];

这个语句将确定数组的索引是否在0处,所以这意味着数组是空的。

Echo “no errors detected”

Echo “Errors are founded: ${#errors[@]}”

Else部分显示数组中的元素数,显示数组不是空的。所以它是一个单一的元素,因为三个字因为双引号而被当作单独的元素。

例5

在前面的例子中, 我们使用了 "printf "来打印数组中的元素.用 "echo "命令代替了print命令.考虑一个通过 "declaration "关键字声明的数组

$ declare –a array=()

在这个例子中,我们将空格分配给数组的第一个索引。

$ array[0]= ‘  ’

为了检查数组中该索引的值,我们将回显该值。这一次我们不想得到数字,我们只想检查值。

$ echo ${array[0]}

这一次,在命令中直接使用了索引号而不是任何变量。运行相应的命令。从输出结果来看,你会发现显示了一个空格。用户可能认为这个数组是空的。但事实并非如此。所以我们将检查数组中在'0'索引处存在的元素数量。这将通过在命令中使用'hash'符号来实现

$ echo ${#array[0]}

因此可以确认'1'元素存在于数组中。同样,还有一个类似的例子,如果用户不确定他是否已经填满了数组索引。他可以通过使用echo的命令来检查

$ echo ${array2[1]}

结果是空白的空间。每一个空白的时间空间并不意味着它是一个空格字符。

$ echo ${#array2[1]}

答案是'0',这意味着一个空数组。现在我们执行与上面讨论的相同的程序。给数组分配空格,然后检查数字;它将显示'1'。

这样就证明了每次命令结果中的空白并不意味着它是 "空格 "字符。

例6

如果你在数组中已经有了一个值,要么它已经满了,要么在特定的索引上有元素,而你想删除所有的元素以保持数组的空。现在编造一个术语'unset'.在bash中,这将删除数组中的所有元素,并宣布相应的数组为空。

$ unset array2[@]

之后, 你可以通过命令检查数值.

例7

在最后一个例子中, 我们将展示向数组添加数值的方法.然而这并不是第一次,但这是另一种方式。

$ array2 +=(item1)

结论

人们认为在创建数组时声明其为空是比较好的,因为这有助于减少将来的冗余。为了保持数值的连贯性,你需要动态地填充数组。 这篇文章是一个完整的指南,根据使用情况,在初始化时和之后都要声明数组为空。