Bash : 索引数组

Bash 提供了两种类型的数组,分别是索引数组(indexed array)和关联数组(associative array)。本文主要介绍索引数组的基本用法。

索引数组的基本特点

Bash 提供的数组都是一维数组。
任何变量都可以用作索引数组。
通过 declare 关键字可以显式的声明一个索引数组。
数组的大小是不受限制的。
索引数组的元素的索引不必是连续的。
通过从零开始的整数引用数组元素。
除非另外注明,索引数组必须使用非负的整数索引元素。

自动创建索引数组

通过赋值语句可以隐式的创建索引数组:

$ myArr[0]=apple

通过给索引为 0 的元素赋值,变量 myArr 会被初始化成一个索引数组。
当然也可以这样:

$ myArr[3]=orange

不用必须从索引 0 开始赋值。

显式声明一个索引数组

通过 declare 关键字和 -a 选项可以显式的声明索引数组:

$ declare -a myArr

然后进行初始化:

$ myArr=(apple orange pear)

也可以在声明的时候进行初始化:

$ declare -a myArr=(apple orange pear)

或者在声明后只初始化某个元素:

$ myArr[0]=grape

引用数组元素

引用数组元素稍微麻烦些,不仅要指定元素的索引位置,还需要使用 ${} 符号。请注意,索引数组的下标从 0 开始,且不能为负数(真希望所有编程语言中的数组元素都从 0 开始索引!)。

$ myArr[0]=apple
$ echo ${myArr[0]}

如果不小心引用了没有赋值的元素呢?不用担心,这里没有程序崩溃的问题,只不过没有输出内容而已:

我们还可以轻松的输出数组的全部元素:

$ declare -a myArr=(apple orange pear)
$ myArr[10]=grape
$ echo ${myArr[@]}

第四个元素的索引是不连续的。我们可以获取到所有已经赋值元素的下标进行查看:

$ echo ${!myArr[@]}

变量也可以用来索引数组元素:

$ declare -a myArr=(apple orange pear)
$ i=2$ echo ${myArr[$i]}

对于索引数组,如果你不按规矩引用数组元素可能产生一些诡异的状况。比如,用一个字符串代替非负的整数去索引元素会发生什么?

$ declare -a myArr=(apple orange pear)
$ echo ${myArr[hello]}

这往往不是你想要的结果。实际上,无论你写什么样的字符串,都会被当做 0 来处理。

添加数组元素

比较常见的数组操作是在数组的尾部添加新的元素(严谨点说,这应该是队列的一个特征!):

$ declare -a myArr=(apple orange pear)
$ myArr=("${myArr[@]}" grape)
$ echo ${myArr[@]}

请注意最后一行的输出,这样添加的元素的索引是连续的。

把两个数组连接成一个也是比较常见的操作:

$ declare -a myAbc=(a b c)
$ myArr=("${myArr[@]}" "${myAbc[@]}")
$ echo ${myArr[@]}

提取子数组

提取部分数组元素:

$ declare -a myArr=(a b c d e f g)
$ echo ${myArr[@]:2:3}

数组的长度

在 Bash 中,引用数组长度的语法多少有些奇特:

$ declare -a myArr=(apple orange pear)
$ echo ${#myArr[@]}

数组长度是指被赋值了的元素个数:

$ myArr[10]=grape
$ echo ${#myArr[@]}

我们还可以获取到某个元素的长度:

哈哈,看起来有些像二维数组了!

遍历数组元素

通过 for 语句可以像其它编程语言那样遍历数组中的元素:

$ declare -a myArr=(apple orange pear)
$ myArr[10]=grape
$ for element in "${myArr[@]}"; do echo $element done

删除数组元素

$ declare -a myArr=(apple orange pear)
$ unset myArr[1]
$ echo ${myArr[1]}

索引为 1 的元素已经为空了,其实数组的长度也发生了变化:

$ echo ${#myArr[@]}

此时数组的长度已经变成了 2。

下面来个复杂点的:

$ declare -a myArr=(a b c d e f)
$ myArr=("${myArr[@]:0:3}" "${myArr[@]:4}")

上面的代码移除了元素 d:

清空数组

$ declare -a myArr=(apple orange pear)
$ unset myArr
$ echo ${myArr[@]}




本文转自xsster51CTO博客,原文链接: ,如需转载请自行联系原作者













本文转自xsster51CTO博客,原文链接: http://blog.51cto.com/12945177/1948527,如需转载请自行联系原作者


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454044.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 第三方模块之 smtplib

1 python对SMTP的支持 SMTP(Simple Mail Transfer Protocol)是简单传输协议,它是一组用于用于由源地址到目的地址的邮件传输规则。 python中对SMTP进行了简单的封装,可以发送纯文本邮件、HTML邮件以及带附件的邮件。两个核心模块…

Node.js 使用jQuery取得Nodejs http服务端返回的JSON对象示例

server.js代码: // 内置http模块,提供了http服务器和客户端功能(path模块也是内置模块,而mime是附加模块) var httprequire("http");// 创建服务器,创建HTTP服务器要调用http.createServer()函数&#xff0c…

svg 动画_根据AI导出的SVG path制作SVG线条动画

点击右上方红色按钮关注“web秀”,让你真正秀起来前言首先祝大家2019新年快乐,万事大吉,猪事顺利,阖家欢乐。前面文章SVG 线条动画基础入门知识学习到了基础知识,现在来给大家讲讲如何制作SVG 制作复杂图形线条动画。假…

读书笔记2013第3本:《无价》

《无价》这本书是过年前买的,网络书店上写着“老罗推荐”,想着好像是在老罗哪一年的演讲里听过这本书,在豆瓣上评分7.9。读书是为了产生行动,读书时要提的4个问题,1)这本书主要在谈些什么?2&…

Linux下的程序调试——GDB

无论是多么优秀的程序员,都难以保证自己在编写代码时不会出现任何错误,因此调试是软件开发过程中的一个必不可少的 组成部分。当程序完成编译之后,它很可能无法正常运行,或者会彻底崩溃,或者不能实现预期的功能。此时如…

圆锥曲线万能弦长公式_2020高考数学50条秒杀型公式与方法

考试马上就要到了,学姐整理了高考数学50条秒杀型公式和方法,希望能帮助考生们更好地攻克数学难关!高考数学秒杀公式与方法一1,适用条件:[直线过焦点],必有ecosA(x-1)/(x1),其中A为直线与焦点所在…

Python 内置模块之 logging

日志的级别和适用情况 级别适用情况DEBUG详细信息,通常只在诊断问题时对其感兴趣INFO确认工作正常WARNING表示发生了意料之外的事或者在不远的将来会有问题(比如磁盘空间低)。软件依然正常工作ERROR由于一个更加严重的问题,软件不…

数据结构与算法 Python语言描述 笔记

数据结构 线性表包括顺序表和链表,python的list是顺序表,链表一般在动态语言中不会使用。不过链表还是会出现在各种算法题中。 链表 link list 单链表 逆转链表: leetcode 206双链表循环单链表字符串 string 有一个重要的点就是字符串的匹配问…

Flask 跨域问题

一、什么是跨域 跨域是指:浏览器A从服务器B获取的静态资源,包括Html、Css、Js,然后在Js中通过Ajax访问C服务器的静态资源或请求。即:浏览器A从B服务器拿的资源,资源中想访问服务器C的资源。 同源策略是指:…

1.3 使用电脑测试MC20的电话语音功能

需要准备的硬件 MC20开发板 1个https://item.taobao.com/item.htm?id562661881042GSM/GPRS天线 1根https://item.taobao.com/item.htm?id531979567261IPEX接口转SMA接口转接线 1根https://item.taobao.com/item.htm?id531979903836GPS有源天线 1根https://item.taobao.com/i…

前端之 AJAX

AJAX参数详细列表 参数名类型描述urlString(默认: 当前页地址) 发送请求的地址。typeString(默认: "GET") 请求方式 ("POST" 、 "GET")。注意:其它 HTTP 请求方法,如 PUT 和 DELETE ,但仅部分浏览器支持。tim…

html5--1.18 div元素与布局

1.18 div元素与布局 1.元素的分类2.div元素与布局 1、元素的分类 块元素:主要特征是会产生换行效果,自动与其他元素分离成两行;通常可以作为容器在内部添加其他元素。已经学过的块元素有: h1~h6;hr;ul;ol;p;table......... 内联元素:不会产生…

五个优秀的视频格式转换工具

电脑、手机、DVD播放机、PSP……这么多的东西都可以播放视频,但是视频格式又千差万别的,我们该怎么办?这里,我们介绍五个功能强大且易于使用的媒体转换器,用于转换不同类型的视频文件。 一、Super (Windows) Super是一…

艾宾浩斯记忆表格excel_Excel全年学习复习计划表(艾宾浩斯遗忘曲线)

最近准备考在职博士,刷刷学历,不得不又拿起必考的英语来,发现由于这几年敲代码,日常生活词汇忘了很多,只好买本考博词汇背诵,不过三十而立的人背起来确实费劲了,所以开始寻找好的背诵方法。又想…

七个帮助你处理Web页面层布局的jQuery插件

1.UI.Layout jQuery UI布局插件官方网站:http://layout.jquery-dev.com/index.cfm使用大小可折叠的嵌套面板和大量选项创建高级UI布局。布局可以创建任何你想要的UI外观; 从简单的标题或侧边栏到具有工具栏,菜单,帮助面板,状态栏…

前端之 CSS

CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素。 当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染)。 CSS语法 CSS实例 每个CSS样式由两个组成部分:选择器…

在Window下编译OpenH323

前言: 本文只提供VC6.0的编译说明,如果想知道VC.Net下的编译过程请参看原文。 原文 : http://www.voxgratia.org/docs/pwlib_windows.html#msvc_headers 作者 :Craig Southeren 翻译 : Richard 原文…

matlab立体坐标定位_无惧密集建筑,小天才立体定位技术带来最强定位体验

如今,在可穿戴设备市场中,智能手表占据相当大一部分。而作为核心功能之一的定位,在智能手表中发挥着不可替代的作用,尤其是对于儿童电话手表而言。并且,在技术飞速进步,产品迭代加快的当前,儿童…

svga文件如何查看_电脑隐藏文件?如何查看隐藏文件 方法简单易学

大家好,我是小白一键重装软件的客服。如何查看隐藏文件呢?有时候不小心把文件夹勾选隐藏后文件就消失了,到底是怎么回事呢?其实这个是电脑上面一些设置开启了文件隐藏的功能哦,那么下面小白系统带你了解下如何查看隐藏…

化工图纸中LISP_必备干货丨石油化工安装工程质量与成本控制研究

对于整个石油化工工程来说,石油化工的安装工程在其中是最重要并且最核心的一个环节,其对石油化工工程的质量有着决定性的作用。从客观的角度来说,如果石油化工安装工程在实际的施工过程中出现任何的问题,就会威胁到周边人群的生命…