Shell数组及其相关操作

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 [ ∗ ] &lt; b r / &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

版权声明:本文为qq_28591897原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。