『Bash Shell』如何使用陣列 Array (索引式 Indexed /關聯式 Associative) 程式範例/完整說明

歡迎分享:
  •  
  •  
  •  
  •  
  •  
  •  

 

Bash 支援兩種陣列 (Array) 的型態

1. Indexed array

2. Associative array

第一種 Indexed array 是以數字做陣列的索引,從 0 開始

範例:


#!/bin/sh

#
# 底下有兩種指定陣列成員的方式
# 選一種使用
#

#
# 方式一
#

HTC_phone_list[0]="HTC U11"
HTC_phone_list[1]="HTC U Ultra"
HTC_phone_list[2]="HTC U Play"
HTC_phone_list[3]="HTC One A9s"

#
# 方式二
#

HTC_phone_list=("HTC U11" "HTC U Ultra" "HTC U Play" "HTC One A9s")

#
# 印出陣列中的成員
#
# ${#HTC_phone_list[@]}: 加上 "#" 表示陣列的長度
#

for((i=0; i<${#HTC_phone_list[@]}; i++))

do
        echo ${HTC_phone_list[i]}
done

第二種 Associative array 是以字串做陣列的索引

範例:


#!/bin/sh

#
# 底下有兩種指定陣列成員的方式
# 選一種使用
# 注意: 請勿省略 declare -A
#

#
# 方式一
#

declare -A Score

Score[bob]=85
Score[john]=70
Score[andy]=90

#
# 方式二
#

declare -A Score=([bob]=85 [john]=70 [andy]=90)

# 輸入要查詢的名字

read -p "Please input a name: " name
found=0

#
# 搜尋 Score 陣列的索引是否有此名字
#
# ${!Score[@]}: 加上 "!" 表示陣列的索引
#

for key in ${!Score[@]}
do
        if [ "$key" == "$name" ]; then
                found=1
                break
        fi
done

#
# 印出搜尋結果
#

if [ "$found" -eq "1" ]; then
        echo "The score of $name is ${Score[$name]}"
else
        echo "The name of \"$name\" cannot be found."
fi

發表迴響