1 定義數組
所謂數組,是指将具有相同類型的若幹變量按照一定的順序組織起來的一種資料類型。介紹最常用的幾種數組定義方法。
1.1 通過指定元素值來定義數組
1.2 通過declare語句定義數組
我們已經介紹過,使用者可以通過declare語句來聲明變量。除此之外,使用者還可以使用該語句來定義數組。
在上面的文法中,a選項表示後面定義的是一個數組,其名稱為array。
1.3 通過元素值集合定義數組
1.4 通過鍵值對定義數組
1.5 數組和普通變量
在Shell中,所有的普通變量實際上都可以當做數組變量來使用。對普通變量操作與對相同名稱的下标為0的元素的操作是等效的。
2 數組的指派
2.1 按索引為元素指派
2.2 通過集合為數組指派
3 通路數組
3.1 通路第1個數組元素
3.2 通過下标通路數組元素
3.3 計算數組的長度
或者
3.4 以切片方式擷取部分數組元素
所謂切片,是指截取數組的部分元素或者某個元素的部分内容。例如,指定一個具體的數組,截取從第2個元素開始的5個元素。或者,截取某個數組中指定元素的前幾個字元。
當然,對于上面所說的切片,使用者完全可以使用循環結構來實作。但是對于切片,Shell提供了更加快捷的方式。使用者可以像擷取數組元素的值一樣來擷取數組的某個切片。擷取切片的基本方法如下:
通過上面的方式,使用者得到的切片是一個字元串,并非數組。當然使用者可以将這個切片賦給其他的變量,以供其他地方使用。下面的例子就驗證了這一點。
但是,在某些情況下,使用者可能希望切片得到的結果仍然是一個數組。要得到這個結果,使用者可以使用圓括号操作符,其基本文法如下:
上面的文法隻是在原來的基礎上增加了一對圓括号。
除了可以對數組進行切片之外,使用者還可以對數組元素進行切片,截取某個數組元素的一部分,得到一個子字元串。對數組元素進行切片的文法與對數組進行切片的文法基本相同。隻是将其中的通配符換成某個具體的下标,如下:
在上面的代碼中,第6行對下标為4的第5個元素進行切片,從第3個字元開始,截取其中的4個字元。該程式的執行結果如下:
注:
無論是對數組進行切片還是對數組元素進行切片,如果其中的長度值超過數組或者數組元素的長度,都會截取到數組或者數組元素的末尾為止。
3.5 數組元素的替換
在Shell中,使用者還可以對數組進行另外一種特殊的操作,稱為數組元素的替換。所謂替換,是指将某個數組元素的部分内容用其他的字元串來代替,但是并不影響原來的數組的值。
在上面的文法中,array表示要操作的數組名稱,pattern參數表示要搜尋的字元串,replacement參數表示用來替換的字元串。
注:
為了得到一個新的數組變量,使用者需要使用圓括号操作符。否則,得到的将是一個字元串變量。
4 删除數組
4.1 删除指定數組元素
與删除其他的Shell變量一樣,使用者可以使用unset指令來删除某個數組元素,其基本文法如下:
在上面的文法中,array表示數組名稱,n表示要删除的數組元素的下标,從0開始計算。
4.2 删除整個數組
如果某個數組不再需要了,使用者同樣可以使用unset指令來将其删除,基本文法如下:
5 數組的其他操作
5.1 複制數組
5.2 連接配接數組
在執行數組連接配接時,參與連接配接的數組之間要保留1個空格。
5.3 加載檔案内容到數組
在Shell中,使用者可以将普通的文本檔案的内容直接加載到數組中,檔案的每一行構成數組一個元素的内容。這在處理一些日志檔案的時候非常有用。