標籤:linux shell
shell當中的數組和其他程式設計語言的意義是一樣的,考慮到shell是一個弱類型的指令碼語言,可以在command lime當中直接去定義和使用
例如:
$a[1]="Monday"
$echo ${a[1]}
Monday
$
注意這裡用花括弧,如果寫成echo $a[1] 的話,在執行前shell會進行擴充,結果把a[1]就擴充為"a[1]"的字串,然後和$結合,就直接輸出$後面的字串,即"a[1]",所以在對數組元素操作的時候要用花括弧,以免不必要的出錯。
數組元素的賦值
1 逐個賦值
就直接把指定的數組元素給定值就行了,如a[2]="Tuesday"
2 批量賦值
形式和其他的差不錯,格式是 name=(value1 value2 value3 ...)
例如number=("one" "two" "three" "four")
當然你可以指定下標 number=([0]="zero" [1]="one" [2]="two" [3]="three")
例如:
$number=("one" "two" "three")
$echo ${number[0]}
one
$number1=([0]="zero" [1]="one" [2]="two" [3]="three")
$echo ${number1[0]}
zero
$
從這裡可以知道shell當中數組的下標也是從0開始的
數組的操作
1 大小操作
數組長度的大小可以通過參數擴充瞭解數組的大小,以及數組元素的大小
針對上面的例子可以有:
$echo ${#number[@]} //輸出數組的大小,這個大小是當前數組實際被利用的有效個數
3
$echo ${#number[2]} //輸出第三個即three的長度
5
$
2 尋找數組的下標,這個特徵在之前的語言學習當中並沒有接觸到,它是根據檢查數組當中某一位是否有值,如果有,就把數組所在的下標輸出,這可以在我們尋找數組當中元素有很大的協助,
格式是:${!array[@]}
$number=([1]="Mon" [5]="Fri")
$for i in "${!number[@]}"; do echo $i; done
1
5
3 在數組末尾追加數組元素,和其他接觸的程式設計語言不同,其他語言一旦指定數組長度就不能更改了,而在shell當中它拓展了這類特性,使其能夠根據需要動態增加數組的長度,但是在前面瞭解當中可以看出在運算元組的中期你可能很難知道數組的最大長度了,shell提供一個"+="操作符來解決
$number=(1 2 3)
$echo ${number[@]}
1 2 3
$number+=(4 5 6)
$echo ${number[@]}
1 2 3 4 5 6
$
4 unset array 就可以刪除數組,與之相反的就是定義一個數組,declare -a array
同樣也可以刪除一個數組當中的元素
例如:
$number=(1 2 3)
$unset ‘number[2]‘ //這裡指定待刪除數組元素,記住這裡應該用單引號,以免shell進行擴充了。
$echo "${number[@]}"
1 2
$
5數組名其實和數組當中的第一個元素的地址是一樣的,所以你對數組名進行有關的賦值,其實歸根結底還是對array[0]的賦值。但是如果unset array操作,則整個數組都沒有了,
6關聯陣列,就是數組下標可以是字串,這種類型的數組表達的意思是很明確的,在使用是得用declare -A array 操作是array數組具備這樣的特性。
Linux下shell數組