Linux shell编程学习笔记16:bash中的关联数组

news2024/12/23 16:35:25

上一节我们探讨了普通的数组,即使用数字下标来索引数组中不同的元素的数组,也可以称之为索引数组。

相比纯粹的数字,字符串不仅能表明含义,也更便于记忆使用,于是就有了关联数组。


一、关联数组概述


bash 从4.0开始支持关联数组,关联数组可以使用可以使用任意的字符串、或者整数作为下标来访问数组元素。

与索引数组不同,关联数组必须声明。

二、声明关联数组并赋值

(一)先声明再赋值

1.声明关联数组

格式为:

declare -A 关联数组名

2.给关联数组元素赋值

格式为:

关联数组名[字符串下标]=值

3.实例

[csdn ~]$ exec bash
[csdn ~]$ declare -A a
[csdn ~]$ a["apple"]=apple
[csdn ~]$ a["boy"]=boy
[csdn ~]$ a["cat"]=cat
[csdn ~]$ echo ${a["apple"]}
apple
[csdn ~]$ echo ${a["boy"]}
boy
[csdn ~]$ echo ${a["cat"]}
cat

在这个实例中,我们先声明了关联数组a,接着给数组三个元素赋值,然后逐一输出每个元素值。

(二)声明并初始化赋值

1.格式

与普通的索引数组一样,我们可以在声明关联数组时同时进行初始化赋值,格式如下: 

declare -A 关联数组名=([字符串下标1]=值1 [字符串下标2]=值2 …… [字符串下标n]=值n)

 2.实例

[csdn ~]$ declare -A a=(["apple"]=apple ["boy"]=boy ["cat"]=cat)
[csdn ~]$ echo ${a["apple"]}
apple
[csdn ~]$ echo ${a["boy"]}
boy
[csdn ~]$ echo ${a["cat"]}
cat

在这个实例中,我们先声明了关联数组a并初始化了三个元素值,然后逐一输出每个元素值。

三、获取关联数组所有元素值

方法与普通的索引数组相同。

(一)格式

我们可以使用* 或 @ 作为数组元素下标来获取,具体格式即:

${数组名[@]} 

${数组名[*]}

(二)实例

[csdn ~]$ declare -A a=(["apple"]=apple ["boy"]=boy ["cat"]=cat)
[csdn ~]$ echo ${a[@]}
cat apple boy
[csdn ~]$ echo ${a[*]}
cat apple boy

四、获取关联数组长度

方法与普通的索引数组相同。

(一)格式

${#数组名[下标]}

${#数组名[下标]}

(二)实例

[csdn ~]$ declare -A a=(["apple"]=apple ["boy"]=boy ["cat"]=cat)
[csdn ~]$ echo ${#a[@]}
3
[csdn ~]$ echo ${#a[*]}
3
[csdn ~]$ echo ${#a["apple"]}
5
[csdn ~]$ echo ${#a["boy"]}
3
[csdn ~]$ echo ${#a["cat"]}
3

在本例中,我们先声明了关联数组a并初始化了三个元素值,接着输出数组a的长度,然后逐一输出每个元素的长度。

五、列出关联数组所有字符串下标

由于关联数组使用字符串来作为下标来访问元素,这些作为下标的字符串就不能重复,有时我们想知道已经使用了哪些字符串作为下标,那该如何查询呢?

(一)格式

{!关联数组名[*]}

{!关联数组名[@]}

这个格式与获取数组长度相似,只是获取数组长度时我们用的是字符#,获取关联数组索引时我们使用字符!

(二)实例

[csdn ~]$ declare -A a=(["a"]=apple ["b"]=boy ["c"]=cat)
[csdn ~]$ echo ${a[*]}
apple boy cat
[csdn ~]$ echo ${!a[*]}
a b c
[csdn ~]$ echo ${!a[@]}
a b c

在本例中,我们先声明了关联数组a并初始化了三个元素值,接着输出数组a的所有元素值,然后分别用两种格式逐一输出数组a的所有字符串下标。 

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

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

相关文章

计算机网络相关硬件介绍

计算机相关硬件 计算机由运算器、控制器、存储器、输入设备和输出设备等五个逻辑计算机硬件部件组成。 一、中央处理器(CPU)(运算器、控制器) (1)运算器 运算器是对数据进行加工处理的部件&#xff…

倍福控制Beckhoff_AX5000 控制第三方电机

1. 把第三方电机的.XML 文件,拷贝到 C:\TwinCAT\Io\TcDriveManager\MotorPool 目录下,并重新启动 TwinCAT。 2. 打开新的 System Manager 文件,完成 Choose Target 之后,把 TwinCAT System Manager 置为 Config mode。 3. 右击 …

Android加载SO包

一、前言 这几天用Android整合开源的RTMP推拉流都没成功,好几年没玩Android了碰到好多坑,在Android中为了效率难免需要调用C语言编写生成的SO文件,比如图片渲染加速,视频编解码等插件,今天我们就先聊一下在Android中如…

腾讯云轻量应用服务器性能差吗?为什么便宜?

腾讯云轻量应用服务器性能如何?为什么便宜是不是性能不行?腾讯云百科txybk.com从轻量应用服务器的CPU型号、处理器主频、内存、公网带宽、月流量和系统盘多方面来详细测评轻量性能,轻量应用服务器性价比高,并不是性能不行&#xf…

WindowsServer2019-部署与管理Active Directory域服务-02

部署与管理Active Directory域服务 文章目录 管理域用户、组和组织单位1、新建组织单位2、在组织单位中新建组3、在组织单位中新建用户4、将用户添加到组5、将成员计算机(对象)移动到组织单位 管理域组策略1、配置域组策略2、禁止特定组织单位的用户访问…

使用iperf3测试网络带宽

使用iperf3测试网络带宽 控制变量:这两台电脑或者服务器和电脑的网卡需要支持千兆。避免影响结果出现变量 一、下载及简单使用。 下载:https://iperf.fr/iperf-download.php 使用说明: iperf3.exe -h Usage: iperf [-s|-c host] [option…

Power BI 傻瓜入门 10. 完善数据模型

本章内容包含: 确定中的数据建模过程中影响性能的因素增强数据模型以获得最佳性能优化数据模型以实现企业级报告和可视化 这就是困境。您的报告在测试和开发环境中运行得非常出色。为什么?因为环境是被包容的。但是当您将数据模型部署到生产中时--无论…

研发效能认证学员作品:快速进行持续集成应用实践丨IDCF

作者:赖嘉明 研发效能(DevOps)工程师认证学员 随着数字化转型的推进及市场竞争的加剧,越来越多的企业也意识到持续集成的重要性。 而持续集成作为一种先进的软件开发实践和工具链,可以帮助企业实现自动化构建、集成和…

基于FPGA的图像PSNR质量评估计算实现,包含testbench和MATLAB辅助验证程序

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 设置较大的干扰,PSNR15。 设置较小的干扰,PSNR25。 2.算法运行软件版本 matlab2022a vivado2019.2 3.部分核心程序 ti…

Keil 4 软件安装包下载及安装教程(图文详解)

目录 一.简介 二.安装教程 Keil4(32/64)位下载地址: 链接: https://pan.baidu.com/s/1F72jjsTjeOCLCVeL1c1qXg 密码:24nu 一.简介 Keil C51是一款由Keil Software(现在是ARM公司的一部分&#xff09…

麒麟KYLINOS上使用开始菜单图标开启或关闭vnc

原文链接:麒麟KYLINOS上使用开始菜单图标开启或关闭vnc hello,大家好啊,今天给大家带来第二篇在麒麟KYLINOS上安装部署vnc的文章,本篇文章讲述了如何将vnc的开启及关闭做成图标展示在开始菜单,并且设置当第一次启动vnc…

【LeetCode:2520. 统计能整除数字的位数 | 模拟 | HashMap】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

【问题解决】发现Web应用程序源代码泄露模式

1. 漏洞描述 AppScan扫描软件的安全报告中,有一类漏洞被描述为:“发现Web应用程序源代码泄露模式”。 该类问题指的是在服务器端,Web应用程序的开发者工具(Devtools)中的Sources面板中可以看到前端build构建之后的相关源代码,包…

Win10+Ubuntu20.04双系统双硬盘(SSD+HDD)安装与启动

Win10Ubuntu20.04双系统双硬盘安装与启动 前言准备工作Step 1: 备份你的数据Step 2: 制作安装Ubuntu的磁盘分区若以方式2进行安装:若以方式3进行安装: Step 3: 下载ubuntuStep 4: 制作ubuntu启动U盘Step 5: 从U盘启动ubuntuStep 6: 安装ubuntuStep 7: 系…

9.(vue3.x+vite)组件间通信方式之EventBus

前端技术社区总目录(订阅之前请先查看该博客) 示例效果 EventBus的简介 EventBus 又称为事件总线。是所有组件共用相同的事件中心,可以向该中心注册发送事件或接收事件,所以组件都通知到其他组件,但也就是太方便所以若使用不慎,就会造成难以维护的“灾难”。 其具体的思…

纯干货!一个白帽子挖漏洞经验细致分享

不知道是不是很多人和我一样,每天刷着漏洞,看着自己的排名一位一位的往上提升,但是,但是。总感觉怪怪的,为什么别人刷的漏洞都是现金,而自己刷的漏洞都是给库币。别人一天为什么提交那么多漏洞,…

ES6新增循环对象的四种方法(通俗易懂)

在我们ES6之前,我们一般都是用for…in来循环对象,现在我们ES6为我们新增了几种方法,让我为大家介绍一下吧! 1.Object.keys() 静态方法返回一个由给定对象自身的可枚举的字符串键属性名组成的数组 const obj {name:"zs&quo…

如何在Pacman (Arch Linux)中用Configuration设置HTTP?

首先,确定HTTP爬虫服务器的IP地址和端口。在这个例子中,我们将使用一个免费的HTTP爬虫服务器:getproxy。 接下来,按照以下步骤在 Pacman (Arch Linux) 中设置HTTP爬虫: 1、打开终端。 2、使用以下命令进入 Pacman …

FLStudio2024汉化破解版在哪可以下载?

水果音乐制作软件FLStudio是一款功能强大的音乐创作软件,全名:Fruity Loops Studio。水果音乐制作软件FLStudio内含教程、软件、素材,是一个完整的软件音乐制作环境或数字音频工作站... FL Studio21简称FL 21,全称 Fruity Loops Studio 21,因此国人习惯叫…

极米科技全面发力4K产品,极米H6 Pro 4K、H6 4K高亮定焦版任你选

今年以来,在促进消费升级、新兴渠道红利放缓等多方因素作用之下,智能投影行业成为家电品类中的亮点。极米科技、海信视像、联合光电、京东方等多家上市公司及京东等产业链巨头均在智能投影布局上提速。 其中,极米科技今年在产品布局上更是动…