【Bash脚本】数组初步介绍

数组是最常用且基础的数据结构之一。你可以把数组想象成一个变量,里面存储了多个变量。数组提供了一种便捷的方式,将一组相关的数据元素作为一个整体来表示和操作。

在这篇文章中,我们将介绍 Bash 数组,并解释如何在你的 Bash 脚本中使用它们。

Bash 数组

Bash 支持一维的数字索引数组和关联数组。数字索引数组使用整数作为索引,而关联数组则使用字符串。

数字索引数组可以通过负数索引从末尾访问,-1 表示最后一个元素。索引不一定是连续的。

与大多数编程语言不同,Bash 数组的元素不必是相同的数据类型。这意味着你可以创建一个同时包含字符串和数字的数组。

Bash 不支持多维数组,也不能有数组元素本身也是数组。

数组中可以存储的元素数量没有上限。

创建 Bash 数组

在 Bash 中,数组可以通过几种不同的方式初始化。

创建数字索引数组

Bash 变量是无类型的。任何变量都可以直接用作索引数组,而无需声明。

要显式声明一个数组,可以使用 declare 内置命令:

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 开始,即第一个元素的索引为 0

创建关联数组

关联数组是一种每个元素通过唯一键(而不是索引)来标识的数组。

与数字索引数组不同,关联数组在使用前必须声明。

要声明一个关联数组,使用 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_name

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

数组操作

如果你是 Bash 编程的新手,Bash 数组可能会让你一开始感到困惑。不过,读完这篇文章后,你会对它们有更好的理解。

引用元素

要引用单个元素,你需要知道元素的索引。

可以使用以下语法引用任何元素:

${array_name[index]}

访问数组元素的语法与大多数编程语言类似。花括号 ${} 是必需的,以避免 shell 的文件名扩展操作符。

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

## 声明数组
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## 打印元素
echo ${my_array[1]}

输出:

Helium

如果你使用 @* 作为索引,单词会扩展为数组的所有成员。

要打印所有元素,可以使用:

## 声明数组
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## 打印所有元素
echo "${my_array[@]}"

输出:

Hydrogen Helium Lithium Beryllium

@* 的唯一区别在于 ${my_array[x]} 被双引号包围时。在这种情况下,* 扩展为一个单词,数组元素之间用空格分隔。而 @ 将每个数组元素扩展为单独的单词。这在遍历数组元素时尤为重要。

要打印数组的键,可以在数组名前加上 ! 操作符:

${!array_name[index]}

示例:

## 声明数组
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## 打印所有键
echo "${!my_array[@]}"

输出:

0 1 2 3

数组长度

如果你想确定数组中的元素数量,可以使用以下语法获取数组长度:

${#array_name[@]}

该语法与引用所有元素的语法类似,只是在数组名前加上了 # 字符。

## 声明数组
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## 数组长度
echo ${#my_array[@]}

输出:

4

遍历数组

当你有一个数组时,通常需要对每个元素执行操作。一种实现方式是使用循环遍历数组。for 循环 允许你逐个访问数组中的每个元素,并对其执行所需的操作。

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

## 数组遍历
for i in "${my_array[@]}"
do 
  echo "$i"
done

上面的代码将遍历数组并逐行打印每个元素:

Hydrogen
Helium
Lithium
Beryllium

以下是如何打印所有键和值的示例:

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

## 数组遍历
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=${#my_array[@]}

# 数组遍历
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" )

## 添加新元素
my_array[9]="Aluminum"

## 打印所有元素
echo "${my_array[@]}"

输出:

Hydrogen Helium Lithium Beryllium Aluminum

另一种添加新元素的方式是使用 += 操作符,而无需指定索引。你可以添加一个或多个元素:

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

## 添加新元素
my_array+=( Cobalt Nickel )

## 打印所有元素
echo "${my_array[@]}"

输出:

Hydrogen Helium Lithium Beryllium Cobalt Nickel

删除元素

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

unset my_array[index]

示例:

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

## 删除元素
unset my_array[2]

## 打印所有元素
echo "${my_array[@]}"

输出:

Hydrogen Helium Beryllium

总结

我们已经解释了如何创建数字索引数组和关联数组,并展示了如何遍历数组、计算数组长度以及添加和删除元素。

如果你有任何问题或反馈,欢迎留言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值