bash shell关联数组总结
【原创】本博文为原创博文,引用或转发请注明原始出处和链接:https://www.cnblogs.com/dingbj/p/dict_array.html
什么是关联数组?
关联数组相对于索引数组,又称字典,这里我就不给具体定义了,可以百度。
通过对比普通索引数组,能够快速理解运用关联数组。在定义或者引用索引数组时,通常使用数字下标来索引数组中不同的元素,
而关联数组最大的差别是,元素是无序的,关联数组由特定格式的键值对组成,关联数组的键是唯一的,同时使用键作为下标来索引关联数组元素。当然,对于无变量类型的脚本语言,数字可以被看做特殊的字串,
也就是说,在关联数组的索引中,你也可以使用数字作为键。
定义和初始化关联数组
关联数组初始化赋值方式1
这种情况必须先声明再初始化,例如:
declare -A mydict #声明
mydict["name"]=guess
mydict["old"]=18
mydict["favourite"]=coconut
关联数组初始化赋值方式2:
以索引数组格式定义,只不过元素变成了键值对,这种方式不需要先声明,例如:
mydict=(["name"]=guess ["old"]=18 ["favourite"]=coconut] ["my description"]="I am a student")
也可以声明并同时赋值:
declare -A mydict=(["name"]=guess ["old"]=18 ["favourite"]=coconut ["my description"]="I am a student")
方式2中,和索引数组定义方式一样,直接在变量赋值语句的等号右侧用小括号定义,但括号内部元素格式不同:
元素格式为:["键"]=值,元素键值对之间以空格分隔。
关联数组的引用
引用某个元素时,和普通数组的区别:只是索引为键而已
例如:echo ${mydict["name"]},输出为guess
引用整个关联数组时,和普通数组的引用完全一样
例如:echo ${mydict[@]} 或 echo ${mydict[*]}
关联数组的操作
获取关联数组长度(元素的个数):
例如:echo ${#mydict[@]}
关联数组切片:
通常,索引数组时有序的,而关联数组是无序的,虽然关联数组的切片还是能输出,但输出元素的排列顺序在不同的电脑上是不相同的,因此建议不要使用分片操作;
关联数组元素值的替换:
echo ${mydict[@]/guess/xiaoli}
关联数组的删除:
unset mydict
获取关联数组索引列表:
格式:${!关联数组名[@或*]

注意,键“my description"在这里看不出是一个字符串整体
对关联数组元素直接进行运算:
使用let命令对未定义的元素进行算数计算时,默认值为0,例如:
let mydict['one']++

遍历关联数组元素:
(实际上是对键列表进行遍历,在循环中引用这些键)
同样需要注意的是,${!mydict[@]}和${!mydict[*]}使用双引号括住时的差别:
有@时,双引号括住能保证元素值有空格的情况下不会出问题,
而有*时,双引号括住后将解析为所有索引以空格分隔的字符串,如果再把这个字符串作为循环体中操作关联数组的索引,输出肯定为空。
当不使用引号括住时,只能针 对无空格的元素值才能表现正常,因此,遍历时通常使用有@的格式,并用双引号括住。
例如:

错误用法举例:
(有@或*,但没有双引号括住时,
${!mydict[*]}输出的是没有引号的键的列表,for解析时将有空格的”my description“键拆分为my和description,
但mydict根本就没定义这两个键,因此遍历时输出两个空行)


bash shell关联数组总结的更多相关文章
- 我们一起来学Shell - shell的数组
文章目录 什么是数组 数组中常用变量 数组的定义 小括号定义数组变量 小括号加键值对定义数组变量 分别定义数组变量 动态地定义数组变量 数组赋值的切片 遍历数组 关联数组 我们一起来学Shell - ...
- bash脚本中的普通数组和关联数组
1. 普通数组 bash支持一维数组(不支持多维数组),并且没有限定数组的大小.类似与C语言,数组元素的下标由0开始编号.获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0. ...
- [ SHELL编程 ] 数组、关联数组和awk数组
本文主要对shell编程中常用的数组.关联数组和awk数组定义.操作以及注意事项做个总结,并提供具体案例. 数组 数组定义:一对圆括号表示数组,数组元素之间用空格符号分割. Array=(val1 v ...
- SHELL脚本编程-普通数组(列表)和关联数组(字典)
SHELL脚本编程-普通数组(列表)和关联数组(字典) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组相关概述 变量: 存储单个元素的内存空间 数组: 存储多个元素的连续的 ...
- shell练习--关于关联数组自增统计判断的学习
今天在书上看到了一个关联数组 let statarray["$ftype"]++ 这样一个操作,用来做索引的自增统计,所以记下来 #!/bin/bash #统计文件类型 #关于关 ...
- bash shell数组使用总结
本文为原创博文,转发请注明原创链接:https://www.cnblogs.com/dingbj/p/10090583.html 数组的概念就不多说了,大家都懂! shell数组分为索引数组和关联数 ...
- shell 之awk 关联数组高级应用
最近由于数据迁移过,有些用户信息需要再次确认下,也许数据量比较大,但是需要最终确认的比如说是用户ID和其对应的用户积分数,这样就会导致出现文本a(老的数据),文本b(新的数据).比如 这是文本a.tx ...
- shell之数组和关联数组
数组和关联数组 #!/bin/bash #定义数组1 array_var1=(1 2 3 4 5 6)# #定义数组2 array_var[0]="test1" array_var ...
- 使用bash关联数组统计单词
使用bash关联数组统计单词 从bash 4开始支持关联数组,使用前需要声明,即 declare -A map map[key1]=value1 map[key2]=value2 map=([key1 ...
随机推荐
- Fastjson 1.2.47 远程命令执行漏洞复现
前言 这个漏洞出来有一段时间了,有人一直复现不成功来问我,就自己复现了下,顺便简单记录下这个漏洞原理,以便后面回忆. 复现过程 网上已经有很多文章了,这里就不在写了.主要记录一下复现过程中遇到的问题 ...
- IOS开发中设置导航栏主题
/** * 系统在第一次使用这个类的时候调用(1个类只会调用一次) */ + (void)initialize { // 设置导航栏主题 UINavigationBar *navBar = [UINa ...
- C#数据结构-线索化二叉树
为什么线索化二叉树? 对于二叉树的遍历,我们知道每个节点的前驱与后继,但是这是建立在遍历的基础上,否则我们只知道后续的左右子树.现在我们充分利用二叉树左右子树的空节点,分别指向当前节点的前驱.后继,便 ...
- 机器学习速查表(cheatsheet)资源汇总分享
本文收集整理了机器学习相关速查表(Machine Learning Cheatsheet),包含机器学习.Python.Numpy.Pandas.Matplotlib.线性代数.微积分.统计学.概率论 ...
- 【Python】自动化测试的7个步骤
我们对自动化测试充满了希望,然而,自动化测试却经常带给我们沮丧和失望.虽然,自动化测试可以把我们从困难的环境中解放出来,在实施自动化测试解决问题的同时,又带来同样多的问题.在开展自动化测试的工作中,关 ...
- HCIP --- BGP实验
实验拓扑: 要求: R1.R2是EBGP关系,R2.R4是IBGP关系,R4.R5是EBGP邻居关系 R1与R5的环回可以通信 1.配置IP地址 2.BGP承载与IGP之上,所以给AS 2 启用IGP ...
- MySQL 存储函数的创建、调用、查找
MySQL存储函数(自定义函数),函数一般用于计算和返回一个值,可以将经常需要使用的计算或功能写成一个函数 1.创建存储函数:使用 create function关键字 2.调用存储函数: 3.示例: ...
- 使用aspnet_compiler对web程序进行预编译
前言 本例使用的是asp.net中的webform项目,使用.net框架为.net3.5 操作步骤 正常的web项目发布步骤 发布方法:文件系统 目标位置:发布后的项目文件的路径,可自定义. 打开wi ...
- ESP定律脱壳
ESP定律是比较常用的脱壳方式,作为新手用的也比较多简单写一下我的看法. esp定律的使用过程大致为: 1.开始就点F8,注意观察OD右上角的寄存器中ESP有没突现(变成红色),并且只有sp和ip为 ...
- 你好,Spring!
交个朋友 拿人钱财替人干活儿,在不影响工作的前提下,想做到很高频率的更新很难,但是我也尽力输出,不能为了写而写,宁缺毋滥吧. 我的想法是这样的,接下来的一段时间专门写Spring框架.整体思路就是:入 ...