Bash 索引陣列

2021-09-22 09:08:03 字數 2774 閱讀 1360

bash 提供了兩種型別的陣列,分別是索引陣列(indexed array)和關聯陣列(associative array)。本文主要介紹索引陣列的基本用法。

bash 提供的陣列都是一維陣列。

任何變數都可以用作索引陣列。

通過 declare 關鍵字可以顯式的宣告乙個索引陣列。

陣列的大小是不受限制的。

索引陣列的元素的索引不必是連續的。

通過從零開始的整數引用陣列元素。

除非另外註明,索引陣列必須使用非負的整數索引元素。

通過賦值語句可以隱式的建立索引陣列:

通過給索引為 0 的元素賦值,變數 myarr 會被初始化成乙個索引陣列。

當然也可以這樣:

$ myarr[3]=orange
不用必須從索引 0 開始賦值。

通過 declare 關鍵字和 -a 選項可以顯式的宣告索引陣列:

$ declare -a myarr
然後進行初始化:

也可以在宣告的時候進行初始化:

或者在宣告後只初始化某個元素:

$ myarr[0]=grape
引用陣列元素稍微麻煩些,不僅要指定元素的索引位置,還需要使用 ${} 符號。請注意,索引陣列的下標從 0 開始,且不能為負數(真希望所有程式語言中的陣列元素都從 0 開始索引!)。 $

如果不小心引用了沒有賦值的元素呢?不用擔心,這裡沒有程式崩潰的問題,只不過沒有輸出內容而已:

我們還可以輕鬆的輸出陣列的全部元素:

第四個元素的索引是不連續的。我們可以獲取到所有已經賦值元素的下標進行檢視:

$ echo $
變數也可以用來索引陣列元素:

對於索引陣列,如果你不按規矩引用陣列元素可能產生一些詭異的狀況。比如,用乙個字串代替非負的整數去索引元素會發生什麼? $

echo $

這往往不是你想要的結果。實際上,無論你寫什麼樣的字串,都會被當做 0 來處理。

比較常見的陣列操作是在陣列的尾部新增新的元素(嚴謹點說,這應該是佇列的乙個特徵!):

請注意最後一行的輸出,這樣新增的元素的索引是連續的。

把兩個陣列連線成乙個也是比較常見的操作:

提取部分陣列元素:

$ declare -a myarr=(a b c d e f g)

$ echo $

在 bash 中,引用陣列長度的語法多少有些奇特: $

echo $

陣列長度是指被賦值了的元素個數:

$ myarr[10]=grape

$ echo $

我們還可以獲取到某個元素的長度:

哈哈,看起來有些像二維陣列了!

通過 for 語句可以像其它程式語言那樣遍歷陣列中的元素:

索引為 1 的元素已經為空了,其實陣列的長度也發生了變化:

$ echo $
此時陣列的長度已經變成了 2。

下面來個複雜點的:

$ declare -a myarr=(a b c d e f)

$ myarr=("$"

"$")

上面的**移除了元素 d:

ok,陣列裡已經沒有元素了!

Bash 索引陣列

bash 提供了兩種型別的陣列,分別是索引陣列 indexed array 和關聯陣列 associative array 本文主要介紹索引陣列的基本用法。bash 提供的陣列都是一維陣列。任何變數都可以用作索引陣列。通過 declare 關鍵字可以顯式的宣告乙個索引陣列。陣列的大小是不受限制的。索...

Bash 索引陣列

bash 提供了兩種型別的陣列,分別是索引陣列 indexed array 和關聯陣列 associative array 本文主要介紹索引陣列的基本用法。bash 提供的陣列都是一維陣列。任何變數都可以用作索引陣列。通過 declare 關鍵字可以顯式的宣告乙個索引陣列。陣列的大小是不受限制的。索...

Bash 索引陣列

bash 提供了兩種型別的陣列,分別是索引陣列 indexed array 和關聯陣列 associative array 本文主要介紹索引陣列的基本用法。bash 提供的陣列都是一維陣列。任何變數都可以用作索引陣列。通過 declare 關鍵字可以顯式的宣告乙個索引陣列。陣列的大小是不受限制的。索...