數(shù)組是shell腳本非常重要的組成部分,它借助索引將多個(gè)獨(dú)立的數(shù)據(jù)存儲(chǔ)為一個(gè)集合。普通數(shù)組只能使用整數(shù)作為數(shù)組索引。Bash也支持關(guān)聯(lián)數(shù)組,它可以使用字符串作為數(shù)組索引。在很多情況下,采用字符串式索引更容易理解,這時(shí)候關(guān)聯(lián)數(shù)組就派上用場(chǎng)了。在這里,我們會(huì)看到普通數(shù)組和關(guān)聯(lián)數(shù)組的用法。
(1) 定義數(shù)組的方法有很多種。可以在單行中使用一列值來(lái)定義一個(gè)數(shù)組:
array_var=(1 2 3 4 5 6)
#這些值將會(huì)存儲(chǔ)在以0為起始索引的連續(xù)位置上
另外,還可以將數(shù)組定義成一組“索引-值”:
array_var[0]=”test1″
array_var[1]=”test2″
array_var[2]=”test3″
array_var[3]=”test4″
array_var[4]=”test5″
array_var[5]=”test6″
(2) 打印出特定索引的數(shù)組元素內(nèi)容:
[rhx@localhost?Test]$?vim?arr.sh
[rhx@localhost?Test]$?source?arr.sh [rhx@localhost?Test]$?echo?${array[0]} //輸出:1 [rhx@localhost?Test]$?echo?${array[*]} //輸出數(shù)組元素:1?2?3?4?5?6?7?8?9?10 [rhx@localhost?Test]$?echo?${array[@]} //輸出數(shù)組元素1?2?3?4?5?6?7?8?9?10 [rhx@localhost?Test]$?echo?${#array[@]} //輸出數(shù)組長(zhǎng)度:10 [rhx@localhost?Test]$?echo?${#array[*]} //輸出數(shù)組長(zhǎng)度:10
關(guān)聯(lián)數(shù)組從Bash 4.0版本開(kāi)始被引入。借助散列技術(shù),關(guān)聯(lián)數(shù)組成為解決很多問(wèn)題的有力工具。接下來(lái)就讓我們一探究竟。
1. 定義關(guān)聯(lián)數(shù)組
在關(guān)聯(lián)數(shù)組中,我們可以用任意的文本作為數(shù)組索引。首先,需要使用聲明語(yǔ)句將一個(gè)變量名聲明為關(guān)聯(lián)數(shù)組。像下面這樣:
[rhx@localhost?Test]$declare?-A?ass_array
聲明之后,可以用兩種方法將元素添加到關(guān)聯(lián)數(shù)組中。
? 利用內(nèi)嵌“索引-值”列表的方法,提供一個(gè)“索引-值”列表:
$ ass_array=([index1]=val1 [index2]=val2)
? 使用獨(dú)立的“索引-值”進(jìn)行賦值:
$ ass_array[index1]=val1
$ ass_array’index2]=val2
舉個(gè)例子,試想如何用關(guān)聯(lián)數(shù)組為水果制定價(jià)格:
[rhx@localhost?Test]$?declare?-A?fruit_value [rhx@localhost?Test]$?fruit_value=([apple]="100"[orange]="150") [rhx@localhost?Test]$?echo?${fruit_value[apple]}
2. 列出數(shù)組索引
每一個(gè)數(shù)組元素都有一個(gè)索引用于查找。普通數(shù)組和關(guān)聯(lián)數(shù)組具有不同的索引類(lèi)型。我們可以用下面的方法獲取數(shù)組的索引列表:
$ echo ${!array_var[*]}
也可以使用:
$ echo ${!array_var[@]
以先前提到的fruits_value數(shù)組為例,運(yùn)行如下命令:
$ echo ${!fruits_value[*]}
orange apple
對(duì)于普通數(shù)組,這個(gè)方法同樣可行。