Shell 也支持数组。数组(Array)是若干数据的集合。
定义数组的一般形式为:
array_name=(ele1 ele2 ele3 ... elen)
( )
来表示数组,数组元素之间用空格来分隔=
两边不能有空格,必须紧挨着数组名和数组元素。不要求所有数组元素的类型必须相同
。nums=(29 100 13 8 91 44)
arr=(20 56 "helloworld")
Shell 数组的长度不是固定
的,定义之后还可以增加元素。例如,对于上面的 nums 数组,它的长度是 6,使用下面的代码会在最后增加一个元素,使其长度扩展到 7:
nums[6]=88
无需逐个元素地给数组赋值,下面的代码就是只给特定元素赋值:
ages=([3]=24 [5]=19 [10]=12)
只给第 3、5、10 个元素赋值,所以数组长度是 3。
${array_name[index]}
array_name
是数组名,index
是下标。
n=${nums[2]}
表示获取 nums
数组的第二个元素,然后赋值给变量 n
。
echo ${nums[3]}
输出 nums
数组的第 3 个元素。
${nums[*]}
${nums[@]}
使用@
或*
可以获取数组中的所有元素
#!/bin/bash
nums=(29 100 13 8 91 44)
echo ${nums[@]} #输出所有数组元素
nums[10]=66 #给第10个元素赋值(此时会增加数组长度)
echo ${nums[*]} #输出所有数组元素
echo ${nums[4]} #输出第4个元素
数组长度,就是数组元素的个数。使用#
来获取数组元素的个数
${#array_name[@]}
${#array_name[*]}
如果某个元素是字符串,还可以通过指定下标的方式获得该元素的长度
${#arr[2]}
获取 arr 数组的第 2 个元素(假设它是字符串)的长度。
或者
${#string_name} #string_name 是字符串名。
实例
#!/bin/bash
nums=(29 100 13)
echo ${#nums[*]}
#向数组中添加元素
nums[10]="helloworld"
echo ${#nums[@]}
echo ${#nums[10]}
#删除数组元素
unset nums[1]
echo ${#nums[*]}
echo ${nums[*]}
array_new=(${array1[@]} ${array2[@]})
array_new=(${array1[*]} ${array2[*]})
利用@
或*
,将数组扩展成列表,然后再合并到一起。
两种方式是等价的,选择其一即可。其中,array1
和 array2
是需要拼接的数组,array_new
是拼接后形成的新数组。
#!/bin/bash
array1=(23 56)
array2=(99 "hello,KOBE")
array_new=(${array1[@]} ${array2[*]})
echo ${array_new[@]} #也可以写作 ${array_new[*]}
unset array_name[index]
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[*]}
关联数组使用字符串作为下标,而不是整数,可以使用任意的文本作为数组索引。
关联数组也称为“键值对(key-value)
”数组,键(key)
也即字符串形式的数组下标,值(value)
也即元素值。
declare -A arr_name
关联数组必须使用带有-A
选项的 declare
命令创建,arr_name
为数组名
1、使用行内“索引-值”进行赋值
arr_name=([index1]=val1 [index2]=val2)
实例
declare -A Allstar=(["KOBE"]="24", ["GIGI"]="2", ["Lebron"]="23")
2、使用独立的”索引-值“进行赋值
arr_name[index1]=val1
arr_name[index2]=val2
实例
declare -A Allstar
Allstar["KOBE"]="24"
Allstar["GIGI"]="2"
Allstar["Lebron"]="23"
array_name["index"]
加上$()
即可获取数组元素的值:
$(array_name["index"])
declare -A Allstar
Allstar["KOBE"]="24"
echo $(Allstar["KOBE"])
获取所有元素的下标和值
使用下面的形式可以获得关联数组的所有元素值:
${array_name[@]}
${array_name[*]}
使用下面的形式可以获取关联数组的所有下标值
${!array_name[@]}
${!array_name[*]}
${#array_name[*]}
${#array_name[@]}
#!/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 ${!Allstar[@]}
do
echo "${key} -> ${Allstar[$key]}"
done
输出结果如下:
2
23
24
****************
GIGI
Lebron
KOBE
****************
GIGI -> 2
Lebron -> 23
KOBE -> 24
1、http://c.biancheng.net/view/810.html
2、http://c.biancheng.net/view/3009.html