向shell陣列新增元素有多種方法,每種方法在使用時都有一些需要注意的地方,沒有見過這方面的總結資料,所以自己總結一下。
array_name[index]=value
最簡單的新增方式,直接用下標index為陣列元素賦值,在使用時需要注意的是就是需要確保下標index處原本是沒有值的,否則會替換index處原本的值。
array_name[$]=value
# 或array_name[$]=value
以陣列長度為下標新增,每次只能增加乙個元素。但此方法有乙個前提,就是陣列中的元素下標必須是連續的,否則會存在替換已有元素的風險。例如:
arr=([1]="a" [2]="b")
echo $
arr[$]="c"
echo $
實際上並有新增元素,而是將下標為2的元素值「b」替換為了「c」。
array_name=("$" value1 ... valuen)
這種方式不需要下標連續,可同時新增多個元素,但是有一些要注意的地方:
首先,使用此方式新增元素後,陣列中原有元素的下標會重置,會從0開始變成連續的,如果不希望改變下標則不能使用這種方式。
其次,雙引號不能省略,否則,當陣列array_name中存在包含空格的元素時會按空格將元素拆分成多個。
最後,不能將「@」替換為「*」,雖然在輸出陣列元素時可以相互替換,如果替換為「*」,不加雙引號時與「@」的表現一致,加雙引號時,會將陣列array_name中的所有元素作為乙個元素新增到陣列中。類似於特殊變數$@和$*的區別。
#!/bin/bash
arr1=()
initarray()
showarray()"
echo "length of arr1: $"
echo "the 3rd elements is: $"
echo
}initarray
echo "original arr1:"
showarray
echo "add new elements 3 and 5"
echo "--------------------"
echo "use @ without quote"
arr1=($ 3 5)
showarray
initarray
echo "use * without quote"
arr1=($ 3 5)
showarray
initarray
echo "use @ with quote"
arr1=("$" 3 5)
showarray
initarray
echo "use * with quote"
arr1=("$" 3 5)
showarray
執行結果為:
original arr1:
elements in arr1: a b 2 4
length of arr1: 3
the 3rd elements is: a b
add new elements 3 and 5
--------------------
use @ without quote
elements in arr1: a b 2 4 3 5
length of arr1: 6
the 3rd elements is: 2
use * without quote
elements in arr1: a b 2 4 3 5
length of arr1: 6
the 3rd elements is: 2
use @ with quote
elements in arr1: a b 2 4 3 5
length of arr1: 5
the 3rd elements is: 4
use * with quote
elements in arr1: a b 2 4 3 5
length of arr1: 3
the 3rd elements is: 5
array_name+=(value1 ... valuen)
這種方式不需要元素下標連續,可以新增多個元素,新增後元素下標不會重置,不存在元素覆蓋的風險。唯一要注意的就是「+=」前後不能有空格,並且後面的待新增元素必須用「()」包圍起來,並且多個元素用空格分隔。新新增的元素的下標取決於原本陣列中最後有值的元素的下標。
#!/bin/bash
arr1=()
initarray()
showarray()"
echo "length of arr1: $"
echo "the 3rd elements is: $"
echo
}initarray
echo "original arr1:"
showarray
echo "add new elements 3 and 5"
echo "--------------------"
echo "use += "
arr1+=(3 5)
showarray
echo "the 8th elements is: $"
執行結果為:
original arr1:
elements in arr1: a b 2 4
length of arr1: 3
the 3rd elements is: a b
add new elements 3 and 5
--------------------
use +=
elements in arr1: a b 2 4 3 5
length of arr1: 5
the 3rd elements is: a b
the 8th elements is: 5
陣列中原本的元素沒有改變,新新增的元素下標是在最後有值的元素下標5的基礎上遞增的。
新增方式
語法可新增多個元素
下標必須連續
新增後下標改變
可能覆蓋原有元素
直接下標新增
array_name[index]=value否否
否是陣列長度新增
array_name[$]=value
或array_name[$]=value否是
否是重新建立陣列
array_name=("$" value1 ... valuen)是否
是否賦值運算子+=
array_name+=(value1 ... valuen)是是
是否
jquery 陣列 新增元素
在前提不知道b在這個陣列的下標,刪除b這個元素 var arrlist a b c d arrlist.splice jquery.inarray b arrlist 1 alert arrlist 其中jquery.inarray b arrlist 是b這個元素在陣列arrlist 中的位置 s...
jquery 陣列 新增元素
在前提不知道b在這個陣列的下標,刪除b這個元素 var arrlist a b c d arrlist.splice jquery.inarray b arrlist 1 alert arrlist 其中jquery.inarray b arrlist 是b這個元素在陣列arrlist 中的位置 s...
javascript陣列 新增元素
在陣列最後加乙個元素 var names1 1,2,3 names1.push 66 console.log names1 後台執行結果 1,2,3,66 在陣列最後加多個元素 names1.push 1,23,4 console.log names1 後台執行結果 1,2,3,66,1,23,4 ...