shell 数组元素有空格_Shell数组添加元素及注意事项

向Shell数组添加元素有多种方法,每种方法在使用时都有一些需要注意的地方,没有见过这方面的总结资料,所以自己总结一下。

直接下标添加

array_name[index]=value

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

数组长度添加

array_name[${#array_name[@]}]=value

#或array_name[${#array_name[*]}]=value

以数组长度为下标添加,每次只能增加一个元素。但此方法有一个前提,就是数组中的元素下标必须是连续的,否则会存在替换已有元素的风险。例如:

arr=([1]="a" [2]="b")

echo ${arr[@]}

arr[${#arr[@]}]="c"

echo ${arr[@]}

实际上并有添加元素,而是将下标为2的元素值“b”替换为了“c”。

重新创建数组

array_name=("${array_name[@]}" value1 ... valueN)

这种方式不需要下标连续,可同时添加多个元素,但是有一些要注意的地方:

首先,使用此方式添加元素后,数组中原有元素的下标会重置,会从0开始变成连续的,如果不希望改变下标则不能使用这种方式。

其次,双引号不能省略,否则,当数组array_name中存在包含空格的元素时会按空格将元素拆分成多个。

最后,不能将“@”替换为“*”,虽然在输出数组元素时可以相互替换,如果替换为“*”,不加双引号时与“@”的表现一致,加双引号时,会将数组array_name中的所有元素作为一个元素添加到数组中。类似于特殊变量$@和$*的区别。

#!/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 @ without quote"

arr1=(${arr1[@]} 3 5)

showArray

initArray

echo "use * without quote"

arr1=(${arr1[*]} 3 5)

showArray

initArray

echo "use @ with quote"

arr1=("${arr1[@]}" 3 5)

showArray

initArray

echo "use * with quote"

arr1=("${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(){

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]}"

运行结果为:

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[${#array_name[@]}]=value

或array_name[${#array_name[*]}]=value

重新创建数组

array_name=("${array_name[@]}" value1 ... valueN)

赋值运算符+=

array_name+=(value1 ... valueN)

到此这篇关于Shell数组添加元素及注意事项的文章就介绍到这了,更多相关Shell数组添加元素内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值