如何在 bash 中使用索引數組

數組是一種數據結構,表示具有相同數據類型的對象集合。bash shell中支持兩種類型的數組:關聯數組或索引數組。在本文中,將演示如何在 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 中使用索引數組

本文原創地址:https://www.linuxprobe.com/bash-index-array.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章