Bash 支援兩種陣列 (Array) 的型態
1. Indexed array2. 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
Source: https://go-linux.blogspot.com/2007/03/basharray.html
#!/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
Source: https://go-linux.blogspot.com/2007/03/basharray.html
bash下array的幾種使用方法
#!/bin/bash
#一舉將變數設定到陣列中
array=(Redhat Novell MicroSoft Sun IBM HP Dell)
#利用for loop將陣列中的變數印出
for i in 0 1 2 3 4 5 6
do
echo "array[$i]=${array[$i]}"
done
#設定間隔符號為: 搭配$*將陣列的值一口氣輸出
IFS=:
echo "${array[*]}"
#設定間隔符號為換行,搭配$*將陣列的值一口氣輸出
IFS=$'\n'
echo "${array[*]}"
#將陣列中的值利用$@一口氣輸出與$*不同的是,不會將值合併成單一字串
echo "${array[@]}"
#印出陣列中有幾筆資料
echo "${#array[@]}"
執行結果:
array[0]=Redhat
array[1]=Novell
array[2]=MicroSoft
array[3]=Sun
array[4]=IBM
array[5]=HP
array[6]=Dell
Redhat:Novell:MicroSoft:Sun:IBM:HP:Dell
Redhat
Novell
MicroSoft
Sun
IBM
HP
Dell
Redhat Novell MicroSoft Sun IBM HP Dell
7
#一舉將變數設定到陣列中
array=(Redhat Novell MicroSoft Sun IBM HP Dell)
#利用for loop將陣列中的變數印出
for i in 0 1 2 3 4 5 6
do
echo "array[$i]=${array[$i]}"
done
#設定間隔符號為: 搭配$*將陣列的值一口氣輸出
IFS=:
echo "${array[*]}"
#設定間隔符號為換行,搭配$*將陣列的值一口氣輸出
IFS=$'\n'
echo "${array[*]}"
#將陣列中的值利用$@一口氣輸出與$*不同的是,不會將值合併成單一字串
echo "${array[@]}"
#印出陣列中有幾筆資料
echo "${#array[@]}"
執行結果:
array[0]=Redhat
array[1]=Novell
array[2]=MicroSoft
array[3]=Sun
array[4]=IBM
array[5]=HP
array[6]=Dell
Redhat:Novell:MicroSoft:Sun:IBM:HP:Dell
Redhat
Novell
MicroSoft
Sun
IBM
HP
Dell
Redhat Novell MicroSoft Sun IBM HP Dell
7
沒有留言:
張貼留言