向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/basharr1=()
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 badd 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: 2use * without quote
Elements in arr1: a b 2 4 3 5
Length of arr1: 6
The 3rd elements is: 2use @ with quote
Elements in arr1: a b 2 4 3 5
Length of arr1: 5
The 3rd elements is: 4use * 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/basharr1=()
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 badd new elements 3 and 5
--------------------
use +=
Elements in arr1: a b 2 4 3 5
Length of arr1: 5
The 3rd elements is: a bThe 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)

linux shell 数组添加元素相关推荐

  1. linux shell数组深入学习理解

    本文为大家介绍linux shell数组的相关知识,并提供了充足的例子供参考,这么好的东东,千万不要错过 bash shell只支持一维数组,但参数个数没有限制. 声明一个数组: declare -a ...

  2. linux shell数组定义、元素获取及其长度获取

    linux shell数组定义.元素获取及其长度获取

  3. linux 关联数组,Linux shell数组与关联数组的用法实例

    Linux shell数组与关联数组的用法实例 1. 关联数组 使用 declare -A(declare 的用法请使用 help 进行查看,help declare) 进行声明关联数组变量: $ d ...

  4. Shell数组添加元素注意事项

    向Shell数组添加元素有多种方法,每种方法在使用时都有一些需要注意的地方,没有见过这方面的总结资料,所以自己总结一下. 直接下标添加 array_name[index]=value 最简单的添加方式 ...

  5. linux shell 数组对比,bash shell之数组使用(牛逼篇)

    这次写脚本时用到了bash shell数组,当初做法是配置文件里面写成数组形式A=(element1 element2 element3 .... element4),然后一个脚本读取这个配置文件,于 ...

  6. linux找数组规矩,linux shell 数组建立及使用技巧(示例代码)

    linux shell在编程方面比windows 批处理强大太多,无论是在循环.运算.已经数据类型方面都是不能比较的. 下面是个人在使用时候,对它在数组方面一些操作进行的总结. 1.数组定义 一对括号 ...

  7. linux shell数组与字典用法总结

    shell里面也有数组和所谓的字典,数组分为索引数组和关联数组(关联数组也就是在其他语言里面的字典,在数组和字典的操作方式基本一致). 1. 数组 1.1 创建数组 - 创建空数组 `names=() ...

  8. linux index shell,Linux shell 数组使用

    Ubuntu12.04 TLS 64bit, bash 4.2.25 一.定义 数组是一些数据的集合,分为两个类型 (1)普通数组,只能使用整数作为索引 (2)关联数组,可以使用字符串作为索引,bas ...

  9. linux shell 数组遍历,shell 数组 循环

    #!/bin/bash array=(1 2 3 4 5) #以括号括起为数组 中间是空格 for num in "${array[@]}" #以这种for打印数组 do echo ...

最新文章

  1. SAP PM 初级系列16 - 设备相关的Asset号
  2. java代码中哪些不能犯的错误_Java程序员工作中千万不能犯的3个低级错误
  3. linux多进程知识汇总
  4. 我大学期间看的好书推荐
  5. 【转】用Fiddler做抓包分析详解
  6. Linux 命令之 locate -- 文件查找工具(查找文件/搜索文件)
  7. BI中事实表,维度表和数据集市,数据仓库的理解
  8. 【百度地图API】如何激发手机的高分辨率
  9. linux命令只有一个文件,一天一个Linux基础命令之文件查看命令more
  10. 试解析Tomcat运行原理(一)--- socket通讯
  11. 模型训练:数据预处理和预载入
  12. jar包在linux定时调度,xshell脚本启动JAR包-定时任务拆分日志
  13. 二十五、K8s系统强化1- 系统安全与apparmor
  14. SVN MKACTIVITY
  15. graphql java sql_GraphQL标准的Java实现graphql-java概述
  16. ubuntu安装vasp_Ubuntu常用软件的安装
  17. c++随手写写(链表栈)
  18. 聊一聊推荐系统中ExploitExplore算法
  19. 小米手环NFC 模拟门禁卡 不买东西最简解决方案(100字)
  20. PDF页面大小不一样,怎样调整一致?

热门文章

  1. Altium Designer BGA扇出
  2. 【复习资料】ES6/ES7/ES8/ES9资料整理(个人整理)
  3. 【300】◀▶ IDL - ENVI API
  4. SVM学习笔记5-SMO
  5. Android学习笔记之-Android性能测试之DDMS的使用
  6. Linux 自动重启进程
  7. POJ 1028: Web Navigation
  8. Shell脚本:向磁盘中批量写入数据
  9. 浏览器缓存浅解--记录备复习
  10. FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换