Shell数组及其相关操作

本文主要介绍了Shell数组及其相关操作。Shell数组是若干数据的集合,常用的Bash Shell只支持一维数组。文中详细阐述了数组的定义、读取、获取长度、拼接、删除等操作,还介绍了关联数组,它可使用字符串作为索引,类似Java的key - value类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Shell数组及其相关操作

Shell 数组(Array)是若干数据的集合,其中的每一份数据都称为元素(Element)。下标从 0 开始计数。

没有限制数组的大小,理论上可以存放无限量的数据,且不限制数据类型。

最常用的 Bash Shell 只支持一维数组,不支持多维数组。

数组初识

定义

Shell 中,用括号( )来表示数组,数组元素之间用空格来分隔。

格式

array=(elem1,elem2···elemN)
# 注意:赋值号=两边不能有空格,必须紧挨着数组名和数组元素。

数组实例

#!/bin/bash
# 一般格式
arrs=(1 2 3 4 5)
echo ${arrs[*]}
#弱类型,不限制元素类型
arrs=(1 2 name pass)
echo ${arrs[*]}
#长度不固定,可以随意增加
arrs[4]=25
echo ${arrs[*]}
#索引不一定是连续的数字,无需逐个赋值
arrs=([2]=5 [3]=2 [5]=0)
echo ${arrs[@]}

返回结果

1 2 3 4 5
1 2 name pass
1 2 name pass 25
5 2 0
读取数组

对比

单个元素读取遍历全部元素
格式${array_name[index]}nums[∗]&lt;br/&gt;{nums[*]}&lt;br/&gt;nums[]<br/>{nums[@]}
描述array_name是数组名,index是下标使用@*可以获取数组中的所有元素
示例${arrs[1]}${arrs[*]}

获取长度

对比
获取字符串元素长度获取数组长度
描述如果某个元素是字符串,还可以通过
指定下标的方式获得该元素的长度
利用@*,可以将数组扩展成列表,
然后使用#来获取数组元素的个数
格式${#array_name[index]}${#array_name[@]}
示例${#arrs[@]}${#arrs[2]}
长度示例
#!/bin/bash
arr=(1 2 3 4 5 beijing)
echo ${#arr[@]}

echo ${#arr[5]}
返回结果
6        #数组长度
7        #beijing长度

数组拼接

拼接数组的思路是:先利用@*,将数组扩展成列表,然后再合并到一起。

格式
array_new=(${array1[@]}  ${array2[@]})
array_new=(${array1[*]}  ${array2[*]})
拼接示例
#!/bin/bash
arr1=(1 2 3)
arr2=(中国 美国 英国 西班牙 4)
arr=(${arr1[@]} ${arr2[*]})
echo ${arr[@]}
返回结果
1 2 3 中国 美国 英国 西班牙 4

删除操作

Shell中使用 unset 关键字来删除数组元素

对比
删除单个元素删除整个数组
格式unset array_name[index]unset array_name
描述array_name 表示数组名,index 表示数组下标array_name 表示数组名
删除示例
#!/bin/bash
arr=(1 2 3 4 china)
unset arr[1]
echo ${arr[@]}

unset arr
echo ${arr[*]}
返回结果
1 3 4 china
                               #改行返回为空

在使用unset 进行删除操作时,若某个删除某个下标值后,该字段设置为空,后边的不会顶上来,通过原先的下标仍可以访问。

array[0] 其实删除的只是对应的值,但是array[0]这个位置仍然在,原来的array[1]现在仍是array[1],而不会变为array[0]

关联数组

Bash支持关联数组,它可以使用字符串作为数组索引,有时候采用字符串索引更容易理解

类似于java中的key-value类型,其中,key为下标,value为对应的元素的值,key唯一,value可以不唯一。

格式
# 声明
declare -A array_name
# 赋值
array[string]=value
#string为数组索引,可以为字符串、数字 value为该索引的值
关联示例
#!/bin/bash
#声明在初始化
declare -A arr
arr["name"]="weilong"
arr["age"]=24
arr["email"]="weilong@qq.com"
arr["breaf"]="一条单身IT狗"
arr["location"]="成都"
#或者是直接初始化赋值
worker(["name"="libai" ["age"]="29"] ["sex"]="男")

#遍历数组
for i in ${!arr[*]}
do
    echo "$i => ${arr[$i]}"
done
#输出所有键
echo ${!arr[*]}
#输出所有值
echo ${arr[*]}
#输出数组长度
echo ${#arr[*]}
返回结果
breaf => 一条单身IT狗
name => weilong
email => weilong@qq.com
age => 24
location => 成都
breaf name email age location
一条单身IT狗 weilong weilong@qq.com 24 成都
5
### 关联数组的基础概念 在 Shell 脚本中,关联数组是一种强大的数据结构,允许使用字符串作为键来存储和检索值。这种特性使得关联数组非常适合用于需要快速查找或映射关系的应用场景。 #### 宣告与初始化 要使用关联数组,首先需要宣告它。这可以通过 `declare -A` 命令完成。例如: ```bash declare -A my_assoc_array ``` 接着可以为该数组赋值。以下是几种常见的赋值方法[^4]: 1. **逐项赋值** ```bash my_assoc_array[key1]=value1 my_assoc_array[key2]=value2 ``` 2. **批量赋值** ```bash declare -A my_assoc_array=([key1]=value1 [key2]=value2) ``` #### 数据存取 一旦关联数组被创建并填充了数据,就可以通过键名轻松访问其中的值。例如: ```bash echo "${my_assoc_array[key1]}" ``` 此命令会输出对应于 `key1` 的值。 #### 获取所有键或值 有时可能需要获取整个数组的所有键或值列表。这是可行的,分别如下所示: - 所有键: ```bash echo "${!my_assoc_array[@]}" ``` - 所有价值: ```bash echo "${my_assoc_array[@]}" ``` 这些技巧可以帮助更好地管理和操作大量数据[^3]。 #### 实际应用案例 考虑一个实际的例子,在管理水果及其颜色时使用关联数组可能会非常直观有效: ```bash #!/bin/bash # 声明关联数组 declare -A fruits_colors # 初始化数据 fruits_colors[apple]="red" fruits_colors[banana]="yellow" fruits_colors[grape]="purple" # 输出特定信息 for fruit in "${!fruits_colors[@]}"; do echo "$fruit&#39;s color is ${fruits_colors[$fruit]}" done ``` 这段脚本不仅展示了如何声明、赋值以及遍历关联数组的内容,还体现了其灵活性和实用性。 ### 注意事项 需要注意的是,只有当使用的 Bash 版本至少为 4.0 或以上时才支持关联数组功能。确认当前环境满足条件的方法是运行 `bash --version` 并检查返回的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值