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]} | n u m s [ ∗ ] < b r / > {nums[*]}<br/>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
版权声明:本文为qq_28591897原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。