小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

shell 二維數(shù)組

 饅頭的人生 2018-11-22

 這次寫腳本時用到了bash shell數(shù)組,當(dāng)初做法是配置文件里面寫成數(shù)組形式A=(element1 element2 element3 .... element4),然后一個腳本讀取這個配置文件,于是稍微總結(jié)了一下數(shù)組的使用方法:

Bash shell中使用數(shù)組變量 , 其賦值/定義有兩種 :

1. name=(value1 ... valuen) 此時下標(biāo)從0開始,也可以這樣做:name=([1]=a [2]=b [0]=c)
2. name[index] =value 
3. declare -a arrayname=(element1 element2 element3)
4. declare -a Unix=('Debian' 'Red Hat' 'Red hat' 'SUSE' 'Fedora') # 如果單個元素包括括號

操作方式:

1. 數(shù)組長度:${#arrary[@]}

2. 遍歷數(shù)組:for i in ${array[@]} ; do ; echo $i  或者如下:
先得到這個數(shù)組的有效索引:${!array[@]},然后利用 array[$index]來操作。例如:A={[1]=2 [3]=4 [4]=5}
for idx in ${!A[@]} ; do echo ${idx}_${A[$idx]} ; done
需要注意的是 ${A[*]}與${A[@]}的區(qū)別:
當(dāng)兩者都沒有用""括起來的時候也就是${A[@]} ${A[*]}的效果是一樣的,但是有了""
"${A[@]}" :最大限度的保持原意,比如A[1]='a   b' 那么這樣輸出的也是a  b這是一個整體,而如果沒有"",這輸出的是a b這是兩個元素!
"${A[*]}":所有的元素都變成一個字符串了,也就是一個整體 【Linux公社 http://www. 】

3. 取某一個元素:array[index],如果單個元素里面包含多個空格,那么保留這多個空格需要"",比如echo "${array[2]}"

4. 使一個字符串變bash shell 數(shù)組,可以放在文件里面,然后source file,但是這個file里面的內(nèi)容的是:array=(value1 value2 ... valuen)這種形式,還有一種最簡單的做法:array=(`cat filename`)(此時filename里面就不是array=這種形式了,而是直接value1 value2 value3...) 或者array=(content)

5. 清除一個數(shù)組,清0, unset arrayname

6. 連接兩個數(shù)組,array=("${array1[@]}" "${array2[@]}"),用""的目的是防止元素本身包含空格,前面已經(jīng)提到過

7. 復(fù)制一個數(shù)組,跟上面連接一樣array=("${array1[@]}")

8. 數(shù)組添加元素,原理也跟上面一樣array=("${array1[@]}" "xx")

9. 提取數(shù)組的元素,${array[@]:3:2} 從第三個位置開始,取兩個元素。如果是針對一個元素提取(相當(dāng)于substring)${array[index]:start:len}

貌似bash shell中沒有多維數(shù)組,那么該怎么實現(xiàn)呢?我自己想了一個比較笨的方法,這個方法也得對數(shù)據(jù)的組織形式有要去:
普通的我們一維數(shù)組是這樣的:
a=(1 2 3 4 5 6)
假設(shè)需要一個二維數(shù)組:
b=(1 2 3,
4 5 6,
7 8 9)
當(dāng)然這種寫法是不對的,只是便于理解而已。此時我們可以再構(gòu)造二維數(shù)組之前寫一個這樣的二維數(shù)組:
a=('1 2 3'  '4 5 6'  '7 8 9')
然后我們可以利用
for  i  in "${a[@]}" ; do 
echo $i #這一步就得到了每一行,而如果我們需要二維數(shù)組,那么可以這樣做 
done

for i in "${a[@]}" ; do
b=($i) #此時b就相當(dāng)于二維數(shù)組里面的一維數(shù)組了,然后可以再次遍歷
for j in "${b[@]}"; do
#do someting
done
done

其實我們有時候完全可以這樣做:構(gòu)造成這樣:a=(1 2 3 4 5 6 7 8 9),然后操作的時候利用第i行j列的元素等于i*len+j,len是數(shù)組的第二維度大小,這樣做有時候更簡單,但是就必須得控制一下邊界了,比如3*3的數(shù)組,你可能初始化只給出8個元素。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多