Bash shell中使用数组变量 , 其赋值/定义有两种 :

1. name=(value1 ... valuen) 此时下标从0开始,也可以这样做:name=([1]=a [2]=b [0]=c)

2. name[index] =value

3. declare -a arrayname=(element1 element2 element3)

4. declare -a Unix=('Debian' 'Red Hat' 'Red hat' 'SUSE' 'Fedora') # 如果单个元素包括括号

操作方式:

1. 数组长度:${#arrary[@]}

2. 遍历数组:for i in ${array[@]} ; do ; echo $i  或者如下:

先得到这个数组的有效索引:${!array[@]},然后利用 array[$index]来操作。例如:A={[1]=2 [3]=4 [4]=5}

for idx in ${!A[@]} ; do echo ${idx}_${A[$idx]} ; done

需要注意的是 ${A[*]}与${A[@]}的区别:

当两者都没有用""括起来的时候也就是${A[@]} ${A[*]}的效果是一样的,但是有了""

"${A[@]}" :最大限度的保持原意,比如A[1]='a   b' 那么这样输出的也是a  b这是一个整体,而如果没有"",这输出的是a b这是两个元素!

"${A[*]}":所有的元素都变成一个字符串了,也就是一个整体

3. 取某一个元素:array[index],如果单个元素里面包含多个空格,那么保留这多个空格需要"",比如echo "${array[2]}"

4. 使一个字符串变bash shell 数组,可以放在文件里面,然后source file,但是这个file里面的内容的是:array=(value1 value2 ... valuen)这种形式,还有一种最简单的做法:array=(`cat filename`)(此时filename里面就不是array=这种形式了,而是直接value1 value2 value3...) 或者array=(content)

5. 清除一个数组,清0, unset arrayname

6. 连接两个数组,array=("${array1[@]}" "${array2[@]}"),用""的目的是防止元素本身包含空格,前面已经提到过

7. 复制一个数组,跟上面连接一样array=("${array1[@]}")

8. 数组添加元素,原理也跟上面一样array=("${array1[@]}" "xx")

9. 提取数组的元素,${array[@]:3:2} 从第三个位置开始,取两个元素。如果是针对一个元素提取(相当于substring)${array[index]:start:len}

貌似bash shell中没有多维数组,那么该怎么实现呢?我自己想了一个比较笨的方法,这个方法也得对数据的组织形式有要去:

普通的我们一维数组是这样的:

a=(1 2 3 4 5 6)

假设需要一个二维数组:

b=(1 2 3,

4 5 6,

7 8 9)

当然这种写法是不对的,只是便于理解而已。此时我们可以再构造二维数组之前写一个这样的二维数组:

a=('1 2 3'  '4 5 6'  '7 8 9')

然后我们可以利用

for  i  in "${a[@]}" ; do

echo $i #这一步就得到了每一行,而如果我们需要二维数组,那么可以这样做

done

for i in "${a[@]}" ; do

b=($i) #此时b就相当于二维数组里面的一维数组了,然后可以再次遍历

for j in "${b[@]}"; do

#do someting

done

done

其实我们有时候完全可以这样做:构造成这样:a=(1 2 3 4 5 6 7 8 9),然后操作的时候利用第i行j列的元素等于i*len+j,len是数组的第二维度大小,这样做有时候更简单,但是就必须得控制一下边界了,比如3*3的数组,你可能初始化只给出8个元素。

转载于:https://blog.51cto.com/dengxi/1704011

bash shell之数组使用相关推荐

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

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

  2. shell oracle查询数组,shell 脚本 ---数组

    数组的定义:所谓数组,就是相同数据类型的元素按一定顺序的集合,就是把有限个类型相同的变量用一个名字命令,也就是说这些变量被定义成数组之后,它们就不在有自己的名字了,那么我们怎么找到各个变量或者元素呢? ...

  3. bash shell数组模拟队列queue和shell数组使用技巧

    一 shell数组操作模拟队列queue或者栈stack http://www.tech-recipes.com/rx/911/queue-and-stack-using-array/ here is ...

  4. Bash shell

    一.认识bash shell 1.登录取得的shell就记录在/etc/passwd这个文件内 可以使用cat /etc/passwd查看 2.bash shell 功能 a. 命令记忆能力(hist ...

  5. [Bash Shell] Shell学习笔记

    1. Shell简介 Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的.Shell既是一种命令语言,又是一种程序设计语言.作为命 ...

  6. linux bash shell之declare

    linux bash shell之declare declare或typeset内建命令(它们是完全相同的)可以用来限定变量的属性.这是在某些编程语言中使用的定义类型不严格的方式.命令declare是 ...

  7. Bash Shell学习笔记四

    1. 几个常用命令和基本知识. set $(commond)          将位置参数设置为后面的命令输出 shell命令中 在-- 后面的语句将会不再解释后面的 - cal 万年历 bc 计算器 ...

  8. shell编程-数组的使用

    一.简介 数组中可以存放多个值.Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小.与大部分编程语言类似,数组元素的下标由 0 开始. Shell 数组用括号来表示,元 ...

  9. linux 10 -Bash Shell编程

    二十三. Bash Shell编程: 1.  读取用户变量:     read命令是用于从终端或者文件中读取输入的内建命令,read命令读取整行输入,每行末尾的换行符不被读入.在read命令后面,如果 ...

  10. bash shell 命令 - linux

    参考书籍<Linux命令行与shell脚本编程大全> 复制文件 cp 1.sh -i 13.sh cp -i 在覆盖前询问用户 cp -v 告诉用户正在做什么 创建目录 mkdir 创建多 ...

最新文章

  1. Nature Reviews:拥抱未知:解析土壤微生物组的复杂性
  2. 水仙花数(3.1)(Java)
  3. hdu2433 spfa+mark[x][u][v]优化
  4. 企业如何测试邮件系统反垃圾反病毒的实际效果
  5. MPU6050开发 -- 进阶之I2C/SPI通信协议
  6. [计蒜客]百度地图的实时路况
  7. Python编程从入门到实践~操作列表
  8. JAVA计算一年的第几天问题
  9. 现在更新鸿蒙会成为小白鼠吗,安卓11.0被停用,鸿蒙OS即将登上,花粉:宁愿当小白鼠...
  10. paip输入法编程之生活用高频字,以及汉字分级
  11. 支付那些事儿III---一个BD汪眼中的产品II
  12. 用 MQL5 连接 EA 交易程序和 ICQ
  13. 企划学院第十二期游学活动“聚合”郑州站圆满落下帷幕!
  14. plc几种常用的编程语言特点
  15. 华字后面配什么字比较好_和华字搭配的男孩名字 华后面取什么名字男孩 带华字好听好寓意男孩名...
  16. oracle函数笔记
  17. QCM2290平台XBL阶段I2C使能并点亮LED
  18. 1.结束进程的正确方式
  19. 微信小程序:2022强大的修复版趣味心理测试小程序源码,趣味测试引流裂变神器,流量主激励广告实现管道收益
  20. 008年杀毒软件排行榜以及排行对比图

热门文章

  1. Atitit. Ati IDE 开发平台的第一版规划
  2. Atitit .html5刮刮卡的gui实现总结
  3. Paip.语义分析----情绪情感词汇表总结
  4. paip.提升用户体验---网站导航栏的设计
  5. 配置国内免费registry mirror -daocloud、网易、阿里云和七牛
  6. Rust: 如何交换Vec类型中数据的位置?
  7. (转)FOF资产配置管理系统CBAAS
  8. 敬请注册4月14日边缘计算Meetup(上海站)
  9. 【滤波器设计】基于matlab GUI窗函数法高通+低通+带通带阻FIR滤波器设计【含Matlab源码 072期】
  10. 2021“数维杯”国际大学生数学建模竞赛C题思路