数组是使用最广泛且基础的数据结构之一。你可以将数组想象为一个变量,它内部存储了多个变量。数组提供了一种方便的方式来表示和操作一组相关的数据元素,将它们作为一个单一实体。Bash支持一维的数值索引数组和关联数组类型。数值数组使用整数引用,而关联数组使用字符串引用。
数值索引数组可以使用负索引从末尾访问;索引-1
引用最后一个元素。索引不必连续。与大多数编程语言不同,Bash数组元素不必是同一数据类型。这意味着你可以创建一个包含字符串和数字的数组。
Bash不支持多维数组,也不能有数组元素本身也是数组。
数组中可以存储的元素数量没有限制。
文章目录
在Bash中,可以使用几种不同的方法初始化数组。
Bash变量是未类型化的。任何变量都可以用作索引数组,而无需声明。
要显式声明一个数组,请使用declare
内置命令:创建索引数组的一种方式是使用以下形式:
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
。关联数组是一种数组,其中每个元素由一个唯一键标识,而不是索引。
与数值索引不同,关联数组在使用前必须声明。
要声明一个关联数组,请使用带有-A
(大写)选项的declare
内置命令:关联数组的创建使用以下形式:
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中的数组一开始可能会让你感到困惑。然而,阅读完本文后,你将更好地理解它们。
要引用单个元素,你需要知道元素的索引。
任何元素都可以使用以下语法引用:
访问数组元素的语法与大多数编程语言的语法类似。需要使用花括号${}
来避免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]}
被双引号包围时。在这种情况下,*
扩展为一个单词,其中数组元素用空格分隔。@
将每个数组元素扩展为一个单独的单词。当你使用这种形式来迭代数组元素时,这一点尤其重要。要打印数组的键,可以在数组名前加上!
运算符:这里是一个例子:
## 声明数组
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )
## 打印所有元素
echo "${!my_array[@]}"
0 1 2 3
如果你想确定数组中的元素数量,你可以使用以下语法来获取数组长度:
语法与引用所有元素时相同,只是在数组名前加上#
字符。## 声明数组
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
命令删除元素:让我们看一个例子:
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )
## 删除元素
unset my_array[2]
## 打印所有元素
echo "${my_array[@]}"
Hydrogen Helium Beryllium
无论是数值索引数组还是关联数组,它们都极大地丰富了我们的编程工具箱,让我们能够以更加灵活和高效的方式处理数据集合。通过数组,我们可以轻松实现数据的存储、访问、遍历和修改,这在编写功能强大且易于维护的脚本时显得尤为重要。
Shadowsocks Mac 10.12 完整教程Clash Royale快乐套:卡组建议、使用技巧及常见问题解答v2ray白名单:概念、配置和常见问题详解Clash Linux配置教程CLAN CLash 游戏指南v2ray在Android上的使用指南全面了解贼船VPN:定义、优势、使用教程及常见问题手机连上VPN却无法上网?这些方法帮你轻松解决在iOS上使用Shadowrocket的全面指南从技术上来说翻墙会被发现吗?Shadowrocket Pad使用教程:软件安装、配置方法、常见问题解决Clash在哪里签到倾城极速机场怎么样?中转机场推荐(支持按量付费)shadowrocket华为平板安装包Shadowsocks SSR for Mac教程Cloudflare WARP无法连接是什么原因?机场测速观察---青云梯2025飞天猪机场深度实测 | Trojan协议全解锁+85折 | 流媒体/游戏多场景测评V2RayNG 新手教程指南︱安卓翻墙插件白月光机场2025春节促销限时优惠码