:介紹
在shell4.0之後支援普通陣列和關聯陣列,普通陣列只能使用整數作為索引,關聯陣列可以使用字串作為索引。
普通陣列
普通陣列的定義方法有如下兩種,注意陣列的索引是從0開始
方法1:值之間是使用空格隔開
array=(1 2 3 4 5)
方法2:直接定義索引-值的方法,其實該方法相當於是在給陣列元素賦值。
array[0]="value"
array[1]="value"
1.檢視單個陣列元素值,值的下標從0開始。
[root@localhost backup]# echo ${array[0]} 1
2.查詢陣列所有元素的值,使用*或者@
[root@localhost backup]# echo ${array[*]} 1 2 3 4 5 [root@localhost backup]# echo ${array[@]} 1 2 3 4 5
3.查詢陣列元素的個數,#
[root@localhost backup]# echo ${#array[*]} 5
4.改變陣列元素的值
[root@localhost backup]# array[2]="33" [root@localhost backup]# echo ${array[*]} 1 2 33 4 5
5.定義索引並引用
[root@localhost backup]# i=3 [root@localhost backup]# echo ${array[$i]} 4
6.查詢陣列的索引,使用!
[root@localhost backup]# echo ${!array[*]} 0 1 2 3 4
關聯陣列
普通陣列的索引只能是整數,比如array[0],array[1]等,關聯陣列的索引可以是字串,使用關聯陣列之前必須先宣告關聯陣列。
宣告關聯陣列:
declare -A ass_array
將元素新增到關聯陣列,方法有兩種:
方法1:列表發賦值
ass_array=( [index1]=val1 [index2]=val2)
方法2:單獨賦值
ass_array[index1]=val1
ass_array[index2]=val2
舉例:
declare -A ass_array ass_array=([book]="10 yuan" [pen]="1 yuan")
1.顯示單個陣列元素內容
[root@localhost backup]# echo ${ass_array[book]} 10 yuan
2.查詢關聯陣列所有元素內容
echo ${ass_array[*]} 1 yuan 10 yuan
3.查詢關聯陣列的索引,在陣列前使用!
[root@localhost backup]# echo ${!ass_array[*]}
pen book
4.查詢關聯陣列的元素個數
[root@localhost backup]# echo ${#ass_array[*]} 2
動態陣列生成方法
方法1:
可以使用seq[root@localhost backup]# numarray=$(seq 100) [root@localhost backup]# echo $numarray 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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
方法2:
[root@localhost backup]# echo {1..100} 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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
這兩種定義的動態陣列可以直接在迴圈中呼叫,例如:
for i in $mumarray;do echo $i;done; for i in {1..100};do echo $i;done;
測試二者的效率,可以在其前面加上time
time echo $(seq 10000) real 0m0.056s user 0m0.047s sys 0m0.002s
time echo {1..10000} real 0m0.030s user 0m0.023s sys 0m0.000s
測試10000個元素,顯然第二種方法效能會更好。
總結
普通陣列和關聯陣列只是定義的方法不一樣,查詢的方法是一樣的。
備註: 作者:pursuer.chen 部落格:http://www.cnblogs.com/chenmh 本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明連結。 《歡迎交流討論》 |