引子: 在執行 find /opt/work/testDdir -name 'file*' 時,有可能會返回多個結果。將會返回的結果保存在變量中,需要對其做 [ -r $findResult ] 的處理時,就會報錯 binary operator expected 。 |
於是,開始嘗試一種方法,可以處理這樣類似的報錯。而且,在需要輸出時,也便於控制輸出格式。 |
Bash 提供了對一維數組(索引數組、關聯數組)的支持。
1.創建數組
當出現這樣的定義時,默認創建索引數組,形如:name[subscript]=value
res[i]=$item
使用 declare 聲明一個索引數組
declare -a res
一次性,爲數組所有成員賦值,亦可創建關聯數組
file=(1 2 3 4 5 6 7 8 9)
關聯數組的聲明
declare -A file
2.數組的使用
獲取數組長度:${
#Array[@]}
max=${#res[@]}
成員變量引用格式:${name[subscript]}
# 遍歷數組元素 max=${#res[@]} for((i=0; i<max; i++)); do printf "%s\n" "${res[$i]}" done
引用時,不使用數組下標,默認等於使用 [0] 。
$ printf "${res}" /opt/work/testDir/file6
3.兩者差異
關聯數組的下標可以是個字符串
$ declare -A develop $ develop['yt']="yangtao" $ develop['mtf']="matnfei" $ develop['mh']="mahan" $ printf "length of develop: %d\n" "${#develop[@]}" length of develop: 3 $ printf "%s\n" "${develop['yt']}" yangtao $ printf "%s\n" "${develop['mtf']}" matnfei $ printf "%s\n" "${develop['mh']}" mahan
倘若是索引數組,使用字符串時,就成了這個樣子
$ declare -a develop $ develop['yt']="yangtao" $ develop['mtf']="matnfei" $ develop['mh']="mahan" $ printf "length of develop: %d\n" "${#develop[@]}" length of develop: 1 $ printf "%s\n" "${develop['yt']}" mahan $ printf "%s\n" "${develop['mtf']}" mahan $ printf "%s\n" "${develop['mh']}" mahan
4.使用實例
處理一組相同的任務時,數組是個好東東。檢查一下是否存在多個rpm包,……
command=(tar bz2 md5sum) maxLength=${#command[@]} for((i=0; i<maxLength; i++)); do rpm -q ${command[$i]} echo $? done
執行腳本效果:
[view@file ma]$ . lib/chkCommand tar-1.26-29.el7.x86_64 0 package bz2 is not installed 1 package md5sum is not installed 1