Unix / Linux - 使用 Shell 数组

在本章中,我们将讨论如何在 Unix 中使用 shell 数组。 shell 变量足以保存单个值。 这些变量称为标量变量。

Shell 支持一种不同类型的变量,称为数组变量。 这可以同时保存多个值。 数组提供了一种对一组变量进行分组的方法。 您可以使用存储所有其他变量的单个数组变量,而不是为每个需要的变量创建一个新名称。

为 Shell 变量讨论的所有命名规则都适用于命名数组。


定义数组值

数组变量和标量变量之间的区别可以解释如下。

假设您试图将不同学生的姓名表示为一组变量。 每个单独的变量都是标量变量,如下所示 −

NAME01="Zara"
NAME02="Qadir"
NAME03="Mahnaz"
NAME04="Ayan"
NAME05="Daisy"

我们可以使用一个数组来存储上述所有名称。 以下是创建数组变量的最简单方法。 这有助于为其索引之一赋值。

array_name[index]=value

这里的array_name是数组名,index是你要设置的数组中项的索引,value是你要为该项设置的值。

例如,以下命令 −

NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"

如果你使用的是ksh shell,这里是数组初始化的语法 −

set -A array_name value1 value2 ... valuen

如果你使用的是bash shell,这里是数组初始化的语法 −

array_name=(value1 ... valuen)

访问数组值

设置任何数组变量后,您可以按如下方式访问它 −

${array_name[index]}

这里的array_name是数组名,index是要访问的值的索引。 下面是一个例子来理解这个概念 −

#!/bin/sh

NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Index: ${NAME[0]}"
echo "Second Index: ${NAME[1]}"

上面的例子会产生如下结果 −

$./test.sh
First Index: Zara
Second Index: Qadir

您可以通过以下方式之一访问数组中的所有项 −

${array_name[*]}
${array_name[@]}

这里的array_name 是您感兴趣的数组的名称。下面的例子将帮助您理解这个概念 −

#!/bin/sh

NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Method: ${NAME[*]}"
echo "Second Method: ${NAME[@]}"

上面的例子会产生如下结果 −

$./test.sh
First Method: Zara Qadir Mahnaz Ayan Daisy
Second Method: Zara Qadir Mahnaz Ayan Daisy