array_name=(value1 value2 ... valuen)

读取数组

读取数组元素值的一般格式是:

${数组名[下标]}  
下标是从0开始的

获取数组中的所有元素

echo "数组的元素为: ${my_array[*]}"
echo "数组的元素为: ${my_array[@]}"
两个结果相同
[@]会保持元素之间的独立性,而[*]则倾向于将整个数组视为单个字符串处理。

获取数组的长度

echo "数组元素个数为: ${#my_array[*]}"
echo "数组元素个数为: ${#my_array[@]}"
两个结果相同

添加数组元素

1. 直接下标添加
array_name[index]=value
 最简单的添加方式,直接用下标index为数组元素赋值,在使用时需要注意的是就是需要确保下标index处原本是没有值的,否则会替换index处原本的值。

2. 数组长度添加
array_name[${#array_name[@]}]=value
# 或
array_name[${#array_name[*]}]=value
以数组长度为下标添加,每次只能增加一个元素。但此方法有一个前提,就是数组中的元素下标必须是连续的,否则会存在替换已有元素的风险。例如:

3. 重新创建数组
array_name=("${array_name[@]}" value1 ... valueN)
这种方式不需要下标连续,可同时添加多个元素,但是有一些要注意的地方:
首先,使用此方式添加元素后,数组中原有元素的下标会重置,会从0开始变成连续的,如果不希望改变下标则不能使用这种方式。
其次,双引号不能省略,否则,当数组array_name中存在包含空格的元素时会按空格将元素拆分成多个。
最后,不能将“@”替换为“*”,虽然在输出数组元素时可以相互替换,如果替换为“*”,不加双引号时与“@”的表现一致,加双引号时,会将数组array_name中的所有元素作为一个元素添加到数组中。类似于特殊变量$@和$*的区别。

4. 赋值运算符+=
array_name+=(value1 ... valueN)
这种方式不需要元素下标连续,可以添加多个元素,添加后元素下标不会重置,不存在元素覆盖的风险。唯一要注意的就是“+=”前后不能有空格,并且后面的待添加元素必须用“()”包围起来,并且多个元素用空格分隔。新添加的元素的下标取决于原本数组中最后有值的元素的下标。
例子:
#!/bin/bash

arr1=()
initArray(){
arr1=([2]="a b" [3]=2 [5]=4)
}
showArray(){
echo "Elements in arr1: ${arr1[@]}"
echo "Length of arr1: ${#arr1[@]}"
echo "The 3rd elements is: ${arr1[2]}"
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: ${arr1[7]}"

img

删除数组元素

1. 通过下标,从一个数组中删除元素
# 删除第二个元素
array=(a b c d a b c d)
unset array[1]
echo ${array[*]}
#----------------------
a c d a b c d

2. 根据元素删除
# 删除'b'
array=(a b c d a b c d)
array=( ${array[*]/b} ) #将*换成 @, 结果一致
echo ${array[*]}
#----------------------
a c d a c d

results matching ""

    No results matching ""