当前位置: 首页 > news >正文

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

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

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


一、关联数组概述


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的所有字符串下标。 

相关文章:

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

上一节我们探讨了普通的数组,即使用数字下标来索引数组中不同的元素的数组,也可以称之为索引数组。 相比纯粹的数字,字符串不仅能表明含义,也更便于记忆使用,于是就有了关联数组。 一、关联数组概述 bash 从4.0开始支…...

浏览器是怎么执行JS的?——消息队列与事件循环

看完渡一的课后,感觉这块内容确实非常重要,写 JS 的连 JS 的执行原理都不知道可不行。 事件循环 在写 JS 的时候,你有没有想过 JS 是按照什么顺序执行的?浏览器是怎么执行 JS 代码的?为什么有时候代码没有按照我们认为…...

IMU预积分的过程详解

一、IMU和相机数据融合保证位姿的有效性: 当运动过快时,相机会出现运动模糊,或者两帧之间重叠区域太少以至于无法进行特征匹配,所以纯视觉SLAM对快速的运动很敏感。而有了IMU,即使在相机数据无效的那段时间内&#xff…...

TypeScript中的类型运算符

类型运算符 1. keyof运算符 1. 简介 是一个单目运算符,接受一个对象类型作为参数,返回该对象的所有键名组成的联合类型。 type MyObj {foo: number,bar: string, };type Keys keyof MyObj; // foo|bar这个例子keyof MyObj返回MyObj的所有键名组成的…...

【蓝桥杯选拔赛真题03】C++输出字母Y 青少年组蓝桥杯C++选拔赛真题 STEMA比赛真题解析

目录 C/C++输出字母Y 一、题目要求 1、编程实现 2、输入输出 二、算法分析...

redis搭建集群-多实例快速搭建

1.基础的redis.conf的配置 # Redis configuration file example. # # Note that in order to read the configuration file, Redis must be # started with the file path as first argument: # # ./redis-server /path/to/redis.conf# Note on units: when memory size is ne…...

为什么进行压力测试? 有哪些方法?

在信息技术飞速发展的今天,软件系统的性能已经成为了用户满意度的决定性因素之一。而要确保一个系统在实际使用中能够稳定可靠地运行,压力测试就显得尤为关键。本文将深入探讨什么是压力测试,为什么它是如此重要,以及一些常见的压…...

Java开发者必备:支付宝沙箱环境支付远程调试指南

🔥博客主页: 小羊失眠啦. 🔖系列专栏: C语言、Linux、Cpolar ❤️感谢大家点赞👍收藏⭐评论✍️ 文章目录 前言1. 下载当面付demo2. 修改配置文件3. 打包成web服务4. 局域网测试5. 内网穿透6. 测试公网访问7. 配置二级…...

基于STM32温湿度传感器采集报警系统设计

**单片机设计介绍,1648【毕设课设】基于STM32温湿度传感器采集报警系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序程序 六、 文章目录 一 概要 这次的设计主要是通过读取DHT11和HCSR04的数值,(Proteus的传感器…...

檢測項目簡體字

某些項目可能要求代碼中不允許使用簡體字 安裝stcheck檢查 yarn add stcheck --dev在項目根目錄創建 st.config.json 文件 {"patterns": ["./**/*.(ts|js|tsx|jsx|vue|html)","!**/node_modules/**","!.git/**"],"gitignore&q…...

适用于嵌入式arm的ffmpeg编解码

在嵌入式arm应用开发中,经常会遇到需要处理视频的情况,这时候就需要强大的开源工具ffmpeg出马了。 这里可以下载到各个版本的ffmpeg。 ffmpeg各版本https://www.videohelp.com/software/ffmpeg/old-versions 现在ffmpeg更新较频繁,如…...

nlp与知识图谱代码解读_词嵌入

目录 词嵌入简单原理代码案例解读专业原理介绍场景 词嵌入 简单原理 可以使用一些比喻和生活中的例子: 老师: 你们还记得玩乐高积木的时候,每个积木块代表了一个特定的事物或形状吗?现在,想象一下,每个词…...

HarmonyOS 音频通话开发指导

常用的音频通话模式包括 VOIP 通话和蜂窝通话。 ● VOIP 通话:VOIP(Voice over Internet Protocol)通话是指基于互联网协议(IP)进行通讯的一种语音通话技术。VOIP 通话会将通话信息打包成数据包,通过网络进…...

LeetCode讲解篇之面试题 01.08. 零矩阵

文章目录 题目描述题解思路题解代码 题目描述 题解思路 遍历矩阵,若当前元素为零,则将该行和该列的第一个元素置零 遍历第一行,若当前元素为零,则将当前列置零 遍历第一列,若当前元素为零,则将当前行置零 …...

安装python虚拟环境

什么是虚拟环境: 虚拟环境的意义,就如同 虚拟机 一样,它可以实现不同环境中Python依赖包相互独立,互不干扰。 环境准备 安装python (到官网下载Download Python​配置环境变量,cmd进入命令行输入 python…...

【App 抓包提示网络异常怎么破?】

背景 当你测试App的时候,想要通过Fiddler/Charles等工具抓包看下https请求的数据情况,发现大部分的App都提示网络异常/无数据等等信息。以“贝壳找房”为例: 455 x 705 Fiddler中看到的请求是这样的: 619 x 215 你可能开始找证书的问题:是不是Fiddler/Charles的证书没有…...

【开发篇】一、处理函数:定时器与定时服务

文章目录 1、基本处理函数2、定时器和定时服务3、KeyedProcessFunction下演示定时器4、process重获取当前watermark 前面API篇完结,对数据的转换、聚合、窗口等,都是基于DataStream的,称DataStreamAPI,如图: 在Flink…...

重入漏洞EtherStore

重入漏洞 // SPDX-License-Identifier: MIT pragma solidity ^0.8.13;contract EtherStore {mapping(address > uint) public balances;function deposit() public payable {balances[msg.sender] msg.value;}function withdraw() public {uint bal balances[msg.sender]…...

账号运营的底层逻辑---获客思维

什么是运营? 运营是做什么的? 什么是内容运营? 什么是活动运营? 一篇带你搞清楚所有的底层逻辑!...

Pinia中如何实现数据持久化操作

使用vue3中的pinia,我们可以在多个页面间共享数据,但是一旦我们关闭或刷新页面,这些数据就会丢失,因此,我们需要有一种数据持久化的解决方案。在记录vue3 使用vue3中的pinia,我们可以在多个页面间共享数据&…...

3步实现专业级AI换脸:roop-unleashed创新方案指南

3步实现专业级AI换脸:roop-unleashed创新方案指南 【免费下载链接】roop-unleashed Evolved Fork of roop with Web Server and lots of additions 项目地址: https://gitcode.com/gh_mirrors/ro/roop-unleashed 在数字创意飞速发展的今天,AI换脸…...

从零构建可定制对话系统:模块化架构与RAG实战指南

1. 项目概述:从零构建一个可定制的对话系统最近在折腾一个挺有意思的东西,我把它叫做“定制化聊天系统”。起因很简单,市面上现成的聊天机器人,无论是开源的还是商业的,总感觉差了那么点意思。要么是功能太臃肿&#x…...

别再让某个用户占满硬盘了!手把手教你用Linux quota给CentOS 7/8的/home目录设置磁盘限额

别再让某个用户占满硬盘了!手把手教你用Linux quota给CentOS 7/8的/home目录设置磁盘限额 想象一下这样的场景:你管理的服务器上,十几个开发人员共享着同一个存储空间。某天突然收到警报——磁盘空间不足!调查后发现,一…...

湿版摄影×AI生成革命:为什么93%的MJ用户调不出真实碘化银斑痕?——资深暗房师+AI训练师双视角深度拆解

更多请点击: https://intelliparadigm.com 第一章:湿版摄影AI生成革命:为什么93%的MJ用户调不出真实碘化银斑痕?——资深暗房师AI训练师双视角深度拆解 湿版火棉胶摄影术诞生于1851年,其不可复制的物理噪点——由碘化…...

Deep Lake:AI数据湖实战指南,解决深度学习数据管理难题

1. 项目概述:当数据湖遇上深度学习如果你在深度学习项目里被数据管理搞得焦头烂额过,那你肯定懂我在说什么。模型训练到一半,发现数据版本不对,或者想对海量图像、视频做快速查询和采样,结果被IO速度卡得死死的。传统的…...

独立开发者如何利用 Taotoken 以更低成本试验多种 AI 模型能力

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 独立开发者如何利用 Taotoken 以更低成本试验多种 AI 模型能力 对于独立开发者或小型工作室而言,在产品开发的早期阶段…...

从实验设计到代理模型:我是如何用拉丁超立方抽样节省了80%的仿真成本

从实验设计到代理模型:我是如何用拉丁超立方抽样节省了80%的仿真成本 去年夏天,当我接手某新型电动汽车外形的空气动力学优化项目时,团队正面临一个典型的多参数优化困境:每次计算流体力学(CFD)仿真需要6小…...

Topit:macOS窗口置顶的终极解决方案,开源高效的多任务开发利器

Topit:macOS窗口置顶的终极解决方案,开源高效的多任务开发利器 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit Topit是一款专为macOS系统…...

学生综合素质评价系统设计实现【附程序】

✨ 长期致力于综合素质评价、AHP层次分析、BP神经网络、遗传算法研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)三层指标体系构建与AHP动态权重分配&…...

Hermes Agent 工具如何配置接入 Taotoken 提供的模型服务

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Hermes Agent 工具如何配置接入 Taotoken 提供的模型服务 Hermes Agent 是一个流行的开源智能体框架,它允许开发者通过…...