Bash 索引陣列示例說明
陣列 是一種用來儲存特定類型值的資料結構。你也可以把陣列當作一個變數,但變數只能儲存一個值,而陣列可以在其中儲存多個值。陣列的概念並不僅限於 Bash。任何你使用的程式語言都會有陣列,只是實作方式有所不同。
Bash 支援兩種類型的陣列:
- 索引陣列
- 關聯陣列
索引陣列 是一種陣列,元素(數值)被存儲並分配一個從 0 到 N 的整數編號。陣列中的元素是通過索引號來參考的。您將在即將到來的文章中了解更多關於這個的內容。本文的主要重點僅限於索引陣列。
如何在 Bash 中初始化索引陣列
操作陣列的第一步是創建它。術語 創建、定義、初始化陣列 可以互換使用,但指的是相同的意思——創建陣列。
要建立一個陣列,你應該使用方括號,並將陣列元素(值)放在方括號內。
$ arr1=( one 2 three 4 )
重要注意事項:
- Bash 陣列可以儲存不同資料類型的元素。在某些程式語言中,你只能在同類型的陣列中儲存值。
- 陣列中可以儲存的元素數量沒有任何限制。這取決於您系統記憶體的可用性。
你也可以使用 declare 命令 並搭配 -a 參數來建立索引陣列。
$ declare -a arr1$ arr1=( one 2 three 4 )或者,
$ declare -a arr1=( one 2 three 4 )如何新增或查看陣列的元素
你可以像前一節所示那樣創建一個有值的陣列,或者僅創建一個空陣列,稍後再添加值。以下是如何創建一個空陣列。
$ locations=()陣列中的每個元素都有一個相關的索引值,從 0 到 N。你必須使用索引位置向陣列中添加新元素。
$ locations[0]="Chennai"$ locations[1]="Mumbai"這裡是將元素添加到陣列的圖示說明。
要查看陣列中的元素,您可以使用以下任一語法。
$ echo ${locations[@]}$ echo ${locations[*]}要了解 @ 和 * 之間的差異以及它們如何與陣列一起使用,請參考我們 Bash For Loop 指南中「迴圈遍歷陣列元素」部分。
如果你嘗試列出陣列元素而不使用 @ 或 *,陣列中只有第一個元素會被列印出來。
$ echo ${locations}你可以使用索引位置直接訪問特定元素。
$ echo ${locations[1]}陣列的索引值
在前一節中,我已經展示了如何使用索引位置在陣列中添加元素。當你使用索引位置添加陣列時,你可以跳過並將元素添加到不同的索引位置。
陣列位置在 0 和 1 有兩個元素。現在我可以跳過索引 2,並添加到不同的索引位置。
$ locations[5]="Delhi"從上面的圖片中,你可以看到我已經在陣列的索引位置 5 添加了一個新元素。
如果您想要列印元素的索引值,請在陣列前加上 "!" 符號,如下所示:
$ echo ${!locations[@]}
這將只會列印索引值,而不是列印元素。
要列印索引和元素,請使用以下程式片段。
for val in ${!locations[@]}
do
echo "index = ${val} , value = ${locations[$val]}"
done將值附加到陣列
你可以在不使用索引值的情況下向陣列添加新元素,這將把元素附加到陣列中。
locations=( Chennai Mumbai Delhi )
locations+=( Bangalore )
locations+=( Hyderabad )$ echo ${locations[@]}$ echo ${!locations[@]}找到陣列的長度
你可以透過在陣列前加上 # 符號來取得陣列中有多少個元素。
$ echo ${#locations[@]}使用相同的 # 符號,你也可以檢查陣列是否為空。
if [[ ${#locations[@]} -ne 0 ]]; then
echo "Array is Not empty"
else
echo "Array is Empty"
fi從陣列中移除元素
要從陣列中移除一個元素,你可以使用 unset 命令。看看以下範例,使用 unset 命令從 index(2) 移除了元素。
$ echo ${locations[@]}$ unset locations[2]$ echo ${locations[@]}移除陣列
要刪除陣列,您可以使用相同的 unset 指令。
$ unset locations$ echo ${locations[@]}清空陣列
有時你可能希望移除陣列中的所有元素並保持陣列為空。在這種情況下,你可以簡單地重新建立陣列。
$ echo ${locations[@]}
Chennai Mumbai Delhi Hyderabad Bangalore$ locations=()$ echo ${locations[@]}將命令輸出存儲為陣列
你可以執行任何命令並嘗試將輸出儲存在陣列中。命令應該用括號括起來,以便將輸出儲存為陣列。
$ path_list=( $(echo $PATH | tr ":" "\n") )$ echo ${path_list[@]}陣列切片
切片讓你可以根據元素的索引位置提取陣列中的特定元素。
以下是切片的語法:
${locations[@]:index:length}如果你希望抓取所有元素,但從特定的起始索引位置開始,你可以僅使用索引以以下方式進行。
$ echo ${locations[@]:index} # syntax$ echo ${locations[@]:2}在上面的例子中,陣列將從索引位置 2 開始列印,直到最後一個元素。如果你在指定索引的同時指定了長度,那麼它將使用以下公式來切割陣列。
From index to index+length-1 (inclusive) # Formula$ echo ${locations[@]:1:3}如果你跳過索引而只給出長度,那麼它將使用以下公式進行切割。
From Index 0 to length-1 (inclusive)$ echo ${locations[@]::4}結論
在本文中,我已經帶你了解了 bash 索引陣列。當你開始撰寫複雜的 bash 腳本時,陣列非常重要。它們讓你能夠輕鬆地存儲、檢索和操作不同類型的資料。與 Python 等程式語言不同,bash 沒有內建的方法可以輕鬆使用陣列來執行一些複雜的任務,但仍然是可以實現的。
在我們的下一篇指南中,我們將詳細討論關聯陣列。
- Bash 腳本 - 關聯陣列解析與範例
相關閱讀:
- Bash 腳本 - 使用範例解釋 While 與 Until 迴圈
- Bash 腳本 - 函數解析與範例
- Bash 腳本 - 變數說明與範例
- Bash 重新導向說明與範例
- Linux 中 Bash Echo 指令及範例說明
- Bash Heredoc 初學者教程

















