数组可以通过下标或值进行索引,如果不存在,则值为空。比如:

#!/bin/bash
arr[0]=hello
echo ${arr[1]}  # 输出空内容

使用@输出所有数组的内容,使用#@输出元素的个数

#!/bin/bash
arr[0]=hello
arr[1]=world
echo ${arr[@]}
echo ${#arr[@]}
echo ${#arr[0]}
echo ${arr}  # 也是第一个元素的长度

输出结果:

hello world
2
5
5

可以通过位移和长度的模式来访问数组的元素:

Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
echo ${Unix[@]:3:2}
echo ${Unix[0]:0:2}

输出:

Suse Fedora
De

@表示所有的数组成员,3表示从第3个开始(注意第一个从0开始),2表示包括第3个在内往后的2个元素,这里相当于是3,4个元素;也可以像最后一行那样输出指定位置元素的指定个数。

数组的元素可以通过正则式进行匹配查找和替换:

#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
echo ${Unix[@]/Ubuntu/SCO Unix}

输出SCO Unix,但是这只是暂时的替换,原来数组的元素基本不变。想要永久替换,需要使用下标或者索引进行赋值,比如:

Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
Unix[3]='SCO Linux'
Unix[Debian]=Arch
echo ${Unix[@]}

输出结果:

Arch Red hat SCO Suse Fedora UTS OpenLinux

向数组中添加现有的元素,可以通过如下的方式

#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
Unix=("${Unix[@]}" "Arch" "Antergos")
echo ${Unix[@]}

删除存在的元素,可以通过以下两种方式。第一个是删除元素,但是没有删除元素占用的空间:

#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
unset Unix[3]

第二种是彻底删除,并删除所在的空间:

c
pos=3
Unix=(${Unix[@]:0:$pos} ${Unix[@]:(($pos+1))})
echo ${Unix[@]}

通过正则式来删除元素。本质上是一种替换,把已知元素替换成空。这种方式没有删除所在的空间。

#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
echo ${Unix[@]/Red*/}

如果删除整个数组,直接对数组 进行unset操作即可。

unset Unix

数组的整体赋值:

Linux=("${Unix[@]}")

连接两个数组:

OS=("${Unix[@]}" "${Windows[@]}")

如果从文件内容创建数组,则直接使用cat

Unix=(`cat "./file"`)

注意这种方式,默认的最小分隔符是空格!!!!

Linux Shell编程笔记10 Shell数组的补充相关推荐

  1. 小苏的Shell编程笔记之六--Shell中的函数

    http://xiaosu.blog.51cto.com/2914416/531247 Shell函数类似于Shell脚本,里面存放了一系列的指令,不过Shell的函数存在于内存,而不是硬盘文件,所以 ...

  2. 小苏的Shell编程笔记之五--Shell的控制结构

    任何编程语言都有控制结构,Shell也不例外,这些也是需要牢记的. 1.  if 结构 最简单的判断形式就是if结构.语法为: if 表达式 then 命令行 {else  命令行} fi 当然,if ...

  3. Linux高级专题详解--shell编程大全(shell变量,if语句,case语句,for循环,while循环,函数调用,数组,正则表达式,shell脚本三剑客--grep,sed,awk家族)

    shell编程 初始shell 程序 语言 编程 ---------------------------------- 语言 自然语言:汉语.英语 计算机语言:c语言.c++.(java php py ...

  4. 史上最牛最强的linux学习笔记 10.shell基础

    史上最牛最强的linux学习笔记 10.shell基础 写在最前面: 本文是基于某站的视频学习所得,第一个链接如下: https://www.bilibili.com/video/BV1mW411i7 ...

  5. Linux系统编程笔记(李慧琴) 2

    Linux系统编程笔记(李慧琴) 02系统IO介绍 02系统IO介绍 I/O:input & output, 是一切实现的基础,主要分为 stdio 标准IO (所有的标准都是为了和稀泥整合不 ...

  6. linux+shell+func,Linux shell编程笔记总结

    Linux Shell学习笔记简介 Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口.它是命令语言.命令解释程序及程序设计语言的统称.shell是用户和Linux内核之间的接 ...

  7. Linux 命令行与shell编程 第10章 构建基本脚本

    本章内容 构建基本脚本 使用多个命令 创建shell脚本文件 现在我们已经介绍了Linux系统和命令行的基础知识,可以开始编程了.本章讨论编写shell脚本的基础知识.在开始编写自己的shell脚本大 ...

  8. 【linux】shell 编程之字符串与数组

    前言 对字符串的操作在众多的编程语言中可以说是最基础的了,字符串(String)就是一系列字符的组合.字符串是 Shell 编程中最常用的数据类型之一(除了数字和字符串,也没有其他类型了). 一.sh ...

  9. linux系列之-—01 shell编程笔记

    一.特殊变量($0.$1.$2. $?. $# .$@. $*) shell编程中有一些特殊的变量可以使用.这些变量在脚本中可以作为全局变量来使用. 名称 说明 $0 脚本名称 $1-9 脚本执行时的 ...

最新文章

  1. css3的3d起步——分享
  2. linux 系统打造man中文帮助手册图解
  3. 记录今天学习SQL遇到的一个小问题
  4. Oracle中修改遇到“ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效”
  5. idhttp.post方式 调用datasnap rest 远程方法(转咏南兄)
  6. shell学习之awk或gawk
  7. 批处理批量更改文件名并排序
  8. java程序的开发流程
  9. 编程珠玑续版-chp2 关联数组-awk
  10. Google退出中国 Mark
  11. 如何利用Grasshopper中的C#制作一个简单的Tekla18.1直梁创建电池
  12. Saved Blogs
  13. 推荐收藏 | 常用图片处理网站合集(8个网站)
  14. 利用HomeTabModeHelper2分钟快速搭建Tab+Fragment主页框架
  15. SysML Design Principles
  16. WCF双工通信单工通信
  17. MQ-2烟雾传感器解析
  18. 苹果vs剪辑下载_苹果自带APP到底有多好用?这六款你真的要用起来
  19. 数字货币 永续合约(期货) 相关知识点、计算
  20. php转nodejs 代码,NodeJS实现视频转码的示例代码

热门文章

  1. log4j2 mysql_[简单]log4jdbc-log4j2配置简记
  2. hnu 暑期实训之7还是7 to_string的实现方法
  3. Python界面程序实例:按钮漂移,用Python小套路来撩女神
  4. Tomcat启动乱码及IDEA中tomcat信息乱码解决方法
  5. 调试远程服务器上的代码时报错:调试设置中的Python路径无效
  6. 数据结构实验 2.连续整数之和(2012年北航研究生入学考试)
  7. 模块化思想——粤嵌GEC6818读取图片宽度、高度、色深
  8. c/c++教程 - 总集1. c基础语法
  9. 用C语言编写链式存储的线性表(含代码实现)
  10. 学生信息管理系统问题集锦(二)