您的位置:首页 > 运维架构 > Shell

Shell数组及其相关操作

2019-05-30 16:27 330 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28591897/article/details/90699793

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: