Linux 陣列

pursuer.chen發表於2016-04-27

:介紹

在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

本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明連結。

《歡迎交流討論》

相關文章