如何在 bash 中使用索引陣列

大雄45發表於2021-08-25
導讀 陣列是一種資料結構,表示具有相同資料型別的物件集合。bash  中支援兩種型別的陣列:關聯陣列或索引陣列。在本文中,將演示如何在 bash 中使用索引陣列。以下使用 shell 示例來說明索引陣列的詳細用法。
宣告一個索引陣列

可以使用 declare -a隱式宣告一個索引陣列。請注意, declare -A 選項用於隱式宣告關聯陣列。

$ declare -a
初始化索引陣列

你可以透過多種方式初始化索引陣列。由於 bash 陣列可以儲存整數或字串,因此可以使用整數陣列或字串陣列初始化給定的陣列變數。甚至可以混合儲存整數和字串。但是不能建立巢狀陣列,Bash 只支援一維陣列。

# 初始化一個索引陣列,同時顯式宣告它
# declare -a my_array=(2 4 6 8 10)
# 初始化一個索引陣列,同時隱式宣告它
# my_array2=(orange apple grape mango)
# 儲存整數和字串的混合鍵值陣列
# my_array3=(100 200 "bob" 500 "dan")

如何在 bash 中使用索引陣列如何在 bash 中使用索引陣列
如果要使用預設值0來初始化較大的陣列中每個元素,可以使用for 迴圈。

# 初始化一個大小為 500 的陣列,預設值為0
# declare -a my_big_array=($(for i in {1..500}; do echo 0; done))
讀取和寫入索引陣列中的值

要在索引陣列中的特定索引位置讀取或寫入值,使用中括號 []指定索引。

# my_array2=(orange apple grape mango)
# echo ${my_array2[2]}
grape

如果不初始化陣列,預設情況下陣列中的每個元素都初始化為空值。例如:

[root@localhost ~]# vim my_array.sh 
#!/bin/bash
declare -a my_array4
my_array[10]=apple
if [ -z "${my_array[0]}" ]; then
echo "The element at index 0 is empty"
else
echo "The element at index 0 is non-empty: ${my_array[0]}"
fi

如何在 bash 中使用索引陣列如何在 bash 中使用索引陣列
執行 後輸出的結果:

# sh my_array.sh 
The element at index 0 is empty

如何在 bash 中使用索引陣列如何在 bash 中使用索引陣列

查詢陣列長度

如果想知道索引陣列的長度時,可以使用以下帶有  # 和  @ 符號的表示式。

# fruit_array=(orange apple grape mango)
# echo "Array size: ${#fruit_array[@]}"
Array size: 4

如何在 bash 中使用索引陣列如何在 bash 中使用索引陣列

陣列中新增條目

可以動態地將一個或多個值新增到陣列的末尾,而不是在陣列的特定位置寫入值。使用  += 運算子來做到這一點。

# declare -a color_array=(red yellow)
# color_array+=(blue)
# color_array+=(black white)

如何在 bash 中使用索引陣列如何在 bash 中使用索引陣列
另一種遞增索引陣列的方法如下。

# fruit_array=(orange apple grape mango)
# fruit_array=(${fruit_array[@]} pineappe watermelon)

如何在 bash 中使用索引陣列如何在 bash 中使用索引陣列
還可以利用陣列長度資訊將值附加到陣列的末尾。基本上你在陣列的最後一個索引處插入一個值。

遍歷陣列

如果要遍歷索引陣列,可以使用以下 for 迴圈。

[root@localhost ~]# vim array_for1.sh
[root@localhost ~]# cat array_for1.sh 
#!/bin/bash
declare -a color_array=(red yellow skyblue gray black white)
for color in ${color_array[@]}; do
    echo $color
done

以下是執行 後的輸出資訊:

[root@localhost ~]# sh array_for1.sh 
red
yellow
skyblue
gray
black
white

如何在 bash 中使用索引陣列如何在 bash 中使用索引陣列
或者,可以使用陣列索引遍歷陣列,如下所示:

[root@localhost ~]# vim array_for2.sh 
[root@localhost ~]# cat array_for2.sh 
#!/bin/bash
declare -a color_array=(red yellow skyblue gray black white)
for i in ${!color_array[@]}; do
    echo $i - ${color_array[$i]}
done

以下是輸出資訊:

[root@localhost ~]# sh array_for2.sh 
0 - red
1 - yellow
2 - skyblue
3 - gray
4 - black
5 - white

如何在 bash 中使用索引陣列如何在 bash 中使用索引陣列

列印索引陣列

如果要列印陣列的內容,當然可以遍歷陣列,然後單獨列印每個值。另一種更方便的方法是使用 [@],返回陣列的內容。

# color_array=(red yellow skyblue gray black white)
# echo ${color_array[@]}
red yellow skyblue gray black white

如何在 bash 中使用索引陣列如何在 bash 中使用索引陣列

根據陣列索引對陣列進行切片

bash 中的索引陣列支援不同型別的陣列切片,如下所示。

列印整個陣列:

${my_array[@]}

陣列切片的長度 len, 從 index開始:

${my_array[@]:index:len}

陣列切片的長度 len, 從索引0開始:

${my_array[@]::len}

陣列切片從輸入的索引值開始,到陣列的結尾:

${my_array[@]:index}

檢視以下 bash 陣列切片示例以更好地瞭解其用法:

[root@localhost ~]# vim array_slice.sh
[root@localhost ~]# cat array_slice.sh 
#!/bin/bash
declare -a color_array=(red yellow skyblue gray black white pink purple)
# 獲取整個陣列
echo "Slice #1: ${color_array[@]}"
# 從索引3開始獲取2個值
echo "Slice #2: ${color_array[@]:3:2}"
# 獲取陣列的前5個值
echo "Slice #3: ${color_array[@]::5}"
# 獲取從索引4開始到結束的值
echo "Slice #4: ${color_array[@]:4}"

下面是執行指令碼額之後獲取的資料值:

[root@localhost ~]# sh array_slice.sh 
Slice #1: red yellow skyblue gray black white pink purple
Slice #2: gray black
Slice #3: red yellow skyblue gray black
Slice #4: black white pink purple

如何在 bash 中使用索引陣列如何在 bash 中使用索引陣列

本文原創地址:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2788826/,如需轉載,請註明出處,否則將追究法律責任。

相關文章