Shell数组详解
一、Shell数组
1、定义
2、特征
3、使用
3.1、定义数组实例
3.2、获取数组元素
3.3、数组长度
3.4、数组拼接
3.5、数组删除
二、Shell关联数组
1、定义
2、使用
2.1、定义数组实例
2.2、获取数组元素以及所有元素的下标和值
2.3、数组长度
2.4、关联数组实例
参考
一、Shell数组
Shell 也支持数组。数组(Array)是若干数据的集合。
1、定义
定义数组的一般形式为:
array_name=(ele1 ele2 ele3 … elen)
1
用括号( )来表示数组,数组元素之间用空格来分隔
赋值号=两边不能有空格,必须紧挨着数组名和数组元素。
2、特征
1、Shell 并且没有限制数组的大小,理论上可以存放无限量的数据。
2、Shell 数组元素的下标也是从 0 开始计数。
3、Shell获取数组中的元素要使用下标[ ],下标可以是一个整数,也可以是一个结果为整数的表达式;当然,下标必须大于等于 0。
4、Bash Shell 只支持一维数组,不支持多维数组。
5、Shell 是弱类型的,它并不要求所有数组元素的类型必须相同。
3、使用
3.1、定义数组实例
nums=(29 100 13 8 91 44)
arr=(20 56 “helloworld”)
1
2
3
Shell 数组的长度不是固定的,定义之后还可以增加元素。例如,对于上面的 nums 数组,它的长度是 6,使用下面的代码会在最后增加一个元素,使其长度扩展到 7:
nums[6]=88
1
无需逐个元素地给数组赋值,下面的代码就是只给特定元素赋值:
ages=([3]=24 [5]=19 [10]=12)
1
只给第 3、5、10 个元素赋值,所以数组长度是 3。
3.2、获取数组元素
${array_name[index]}
1
array_name 是数组名,index 是下标。
n=${nums[2]}
1
表示获取 nums 数组的第二个元素,然后赋值给变量 n。
echo ${nums[3]}
1
输出 nums 数组的第 3 个元素。
${nums[]}
${nums[@]}
1
2
使用@或可以获取数组中的所有元素
#!/bin/bash
nums=(29 100 13 8 91 44)
echo ${nums[@]} #输出所有数组元素
nums[10]=66 #给第10个元素赋值(此时会增加数组长度)
echo ${nums[*]} #输出所有数组元素
echo ${nums[4]} #输出第4个元素
1
2
3
4
5
6
7
3.3、数组长度
数组长度,就是数组元素的个数。使用#来获取数组元素的个数
${#array_name[@]}
${#array_name[*]}
1
2
如果某个元素是字符串,还可以通过指定下标的方式获得该元素的长度
${#arr[2]}
1
获取 arr 数组的第 2 个元素(假设它是字符串)的长度。
或者
${#string_name} #string_name 是字符串名。
1
实例
#!/bin/bash
nums=(29 100 13)
echo ${#nums[*]}
#向数组中添加元素
nums[10]=“helloworld”
echo ${#nums[@]}
echo ${#nums[10]}
#删除数组元素
unset nums[1]
echo ${#nums[]}
echo ${nums[]}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
3.4、数组拼接
array_new=(${array1[@]}
a
r
r
a
y
2
[
@
]
)
a
r
r
a
y
n
e
w
=
(
{array2[@]}) array_new=(
array2[@])arraynew=({array1[]} ${array2[]})
1
2
利用@或*,将数组扩展成列表,然后再合并到一起。
两种方式是等价的,选择其一即可。其中,array1 和 array2 是需要拼接的数组,array_new 是拼接后形成的新数组。
#!/bin/bash
array1=(23 56)
array2=(99 “hello,KOBE”)
array_new=(${array1[@]} ${array2[*]})
echo ${array_new[@]} #也可以写作 ${array_new[*]}
1
2
3
4
5
6
7
3.5、数组删除
unset array_name[index]
1
unset 关键字来删除数组元素,array_name 表示数组名,index 表示数组下标。
#!/bin/bash
array1=(8 “hi,GiGi”)
array2=(24 “hello,KOBE”)
array_new=(${array1[@]} ${array2[*]})
echo ${array_new[*]}
unset array_new[0]
echo ${array_new[*]}
1
2
3
4
5
6
7
8
9
10
二、Shell关联数组
关联数组使用字符串作为下标,而不是整数,可以使用任意的文本作为数组索引。
1、定义
关联数组也称为“键值对(key-value)”数组,键(key)也即字符串形式的数组下标,值(value)也即元素值。
declare -A arr_name
1
关联数组必须使用带有-A选项的 declare 命令创建,arr_name为数组名
2、使用
2.1、定义数组实例
1、使用行内“索引-值”进行赋值
arr_name=([index1]=val1 [index2]=val2)
1
实例
declare -A Allstar=([“KOBE”]=“24”, [“GIGI”]=“2”, [“Lebron”]=“23”)
1
2、使用独立的”索引-值“进行赋值
arr_name[index1]=val1
arr_name[index2]=val2
1
2
实例
declare -A Allstar
Allstar[“KOBE”]=“24”
Allstar[“GIGI”]=“2”
Allstar[“Lebron”]=“23”
1
2
3
4
2.2、获取数组元素以及所有元素的下标和值
array_name[“index”]
1
加上$()即可获取数组元素的值:
$(array_name[“index”])
1
declare -A Allstar
Allstar[“KOBE”]=“24”
echo $(Allstar[“KOBE”])
1
2
3
获取所有元素的下标和值
使用下面的形式可以获得关联数组的所有元素值:
${array_name[@]}
${array_name[*]}
1
2
使用下面的形式可以获取关联数组的所有下标值
${!array_name[@]}
${!array_name[]}
1
2
2.3、数组长度
${#array_name[]}
${#array_name[@]}
1
2
2.4、关联数组实例
#!/bin/bash
declare -A Allstar
Allstar[“KOBE”]=“24”
Allstar[“GIGI”]=“2”
Allstar[“Lebron”]=“23”
#获取所有元素值
for value in ${Allstar[]}
do
echo $value
done
echo "**************"
#获取所有元素下标(键)
for key in ${!Allstar[]}
do
echo $key
done
echo “****************”
#列出所有键值对
for key in
!
A
l
l
s
t
a
r
[
@
]
d
o
e
c
h
o
"
{!Allstar[@]} do echo "
!Allstar[@]doecho"{key} -> KaTeX parse error: Expected '}', got 'EOF' at end of input: {Allstar[key]}"
done
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
输出结果如下:
2
23
24
GIGI
Lebron
KOBE
GIGI -> 2
Lebron -> 23
KOBE -> 24
1
2
3
4
5
6
7
8
9
10
11
参考
1、http://c.biancheng.net/view/810.html
2、http://c.biancheng.net/view/3009.html
————————————————
版权声明:本文为CSDN博主「JMW1407」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/JMW1407/article/details/107457932