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,一经查实,立即删除!

相关文章

Flask 第三方组件之 login

在了解使用Flask来实现用户认证之前,我们首先要明白用户认证的原理。假设现在我们自己去实现用户认证,需要做哪些事情呢? 首先,登录。用户能够输入用户名和密码进行登录,所以需要网页和表单,实现用户输入和…

Zookeeper客户端Curator使用详解

http://www.jianshu.com/p/70151fc0ef5dZookeeper客户端Curator使用详解 简介 Curator是Netflix公司开源的一套zookeeper客户端框架,解决了很多Zookeeper客户端非常底层的细节开发工作,包括连接重连、反复注册Watcher和NodeExistsException异常等等。Pat…

python argparse nargs_Python | 使用argparse解析命令行参数

今天是Python专题第27篇文章,我们来聊聊Python当中的命令行参数工具argparse。命令行参数工具是我们非常常用的工具,比如当我们做实验希望调节参数的时候,如果参数都是通过硬编码写在代码当中的话,我们每次修改参数都需要修改对应…

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…

linux下gdb单步调试

用 GDB调试程序 GDB 概述 ———— GDB 是 GNU开源组织发布的一个强大的 UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像 VC、 BCB等 IDE的调试,但如果你是在 UNIX平台下做软件,你会发现 GDB这个调试工具有比 V…

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

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

MySQL提示Truncated incorrect DOUBLE value解决方法

“Truncated incorrect DOUBLE value”的解决方法主要是这两种: 1、修改了多个列的值而各列之间用逗号连接而不要用and 错误写法示例:update tablename set col1value1 and col2value2 where col3value3;正确写法示例:update ta…

一个完美的导航树

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.org/1999/xhtml" ><head><title>无标题页</title><…

自定义python框架_Python web 框架Sanic 学习: 自定义 Exception

Sanic 是一个和类Flask 的基于Python3.5的web框架&#xff0c;它使用了 Python3 异步特性&#xff0c;有远超 flask 的性能。编写 RESTful API 的时候&#xff0c;我们会定义特定的异常错误类型&#xff0c;比如我定义的错误返回值格式为&#xff1a;{"error_code": …

文字水印

using System.Threading.Tasks;using System.IO;using System.Drawing; public static int Shuy(string Sname,string fname) { try { Image image Image.FromFile(fname); Graphics gra Graphics.FromImage(image); String text Sname; Font font new Font("宋体&quo…

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

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

Linux下的程序调试——GDB

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

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

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

Python 内置模块之 logging

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

Memory barrier

待续 Memory barrier,是一种屏障和一类指令&#xff0c;在执行这个屏障指令前后&#xff0c;CPU或者编译器在内存操作上强制一个约束序列。CPU使用性能优化器可以导致执行代码的无序。在单一线程执行中&#xff0c;重排序内存操作通常不会被注意。但是在并行编程或者设备驱动中…

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

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

Flask 跨域问题

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

Hibernate 中配置属性详解(hibernate.properties)

转自&#xff1a;https://blog.csdn.net/shudaqi2010/article/details/70324843 Hibernate能在各种不同环境下工作而设计的, 因此存在着大量的配置参数。多数配置参数都 有比较直观的默认值, 并有随 Hibernate一同分发的配置样例hibernate.properties 来展示各种配置选项。 所需…

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…