Shell - 学习笔记 - 2.15 - Shell关联数组(下标是字符串的数组)

现在最新的 Bash Shell 已经支持关联数组了。关联数组使用字符串作为下标,而不是整数,这样可以做到见名知意。

关联数组也称为“键值对(key-value)”数组,键(key)也即字符串形式的数组下标,值(value)也即元素值。

例如,我们可以创建一个叫做 color 的关联数组,并用颜色名字作为下标。

declare -A color

color["red"]="#ff0000"

color["green"]="#00ff00"

color["blue"]="#0000ff"

也可以在定义的同时赋值:

declare -A color=(["red"]="#ff0000", ["green"]="#00ff00", ["blue"]="#0000ff")

不同于普通数组,关联数组必须使用带有-A选项的 declare 命令创建。关于 declare 命令的详细用法请访问:Shell declare和typeset命令:设置变量属性

访问关联数组元素

访问关联数组元素的方式几乎与普通数组相同,具体形式为:

array_name["index"]

例如:

color["white"]="#ffffff"

color["black"]="#000000"

加上${}即可获取数组元素的值:

${array_name["index"]}

例如:

echo ${color["white"]}

white=${color["black"]}

获取所有元素的下标和值

使用下面的形式可以获得关联数组的所有元素值:

${array_name[@]}

${array_name[*]}

使用下面的形式可以获取关联数组的所有下标值:

${!array_name[@]}

${!array_name[*]}

普通shell数组也可以使用这个方法获得所有下标值。

获取关联数组长度

使用下面的形式可以获得关联数组的长度:

${#array_name[*]}

${#array_name[@]}

关联数组实例演示:

#!/bin/bash

declare -A color

color["red"]="#ff0000"

color["green"]="#00ff00"

color["blue"]="#0000ff"

color["white"]="#ffffff"

color["black"]="#000000"

#获取所有元素值

for value in ${color[*]}

do

    echo $value

done

echo "****************"

#获取所有元素下标(键)

for key in ${!color[*]}

do

    echo $key

done

echo "****************"

#列出所有键值对

for key in ${!color[@]}

do

    echo "${key} -> ${color[$key]}"

done

运行结果:

#ff0000

#0000ff

#ffffff

#000000

#00ff00

****************

red

blue

white

black

green

****************

red -> #ff0000

blue -> #0000ff

white -> #ffffff

black -> #000000

green -> #00ff00

运行前面的例子,如果出现错误提示:

bash: declare: color: cannot convert indexed to associative array

则可能是bash版本没有到4.0,或者是这个变量前面已经定义过了,比如使用source命令执行脚本,而当前进程已经定义过这个变量了。

参考:

Shell关联数组(下标是字符串的数组) (biancheng.net)

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

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

相关文章

AutoSAR(基础入门篇)10.1-Autosar_Ecum模式管理概述

目录 一、什么是模式管理 二、再谈BswM 1、BswM概述 2、BswM执行流程 三、再谈EcuM 模式管理应该算是我们实践篇中较难的内容了,还有就是诊断那章也比较难。因为模式管理里面可能回涉及到很多的名词,很多的特性,所以博主准 备分个8次左右来讲解这些内容。但是在实际的应…

如何在 Angular 中使用环境变量

简介 如果你正在构建一个使用 API 的应用程序,你会想在开发过程中使用测试环境的 API 密钥,而在生产环境中使用生产环境的 API 密钥。在 Angular 中,你可以通过 environment.ts 文件创建环境变量。 在本教程中,你将学习如何在 A…

【Java万花筒】数据流的舵手:大数据处理和调度库对比指南

智慧的导航仪:为您的数据流选择正确的大数据处理和调度库 前言 在如今的信息时代,大数据处理和调度已经成为许多企业和组织中关键的任务。为了有效地处理和管理大规模数据流,选择适合的调度库是至关重要的。本文将介绍几种常用的大数据处理…

【前端工程化面试题】使用 webpack 来优化前端性能/ webpack的功能

这个题目实际上就是来回答 webpack 是干啥的,你对webpack的理解,都是一个问题。 (1)对 webpack 的理解 webpack 为啥提出 webpack 是啥 webpack 的主要功能 前端开发通常是基于模块化的,为了提高开发效率&#xff0…

MATLAB知识点:datasample函数(★★☆☆☆)随机抽样的函数,能对矩阵数据进行随机抽样

讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili 节选自第3章:课后习题讲解中拓展的函数 在讲解第三…

数据类型与变量

目录 作业回顾 有关JDK, JRE, JVM三者: 判断题 新课学习 字面常量 数据类型 变量 整型变量 长整型变量 短整型变量 字节型变量 浮点型变量 字符型变量 布尔型变量 类型转换 自动类型转换(隐式) 强制类型转换(显式…

Navicat安装使用连接MySQL

目录 安装登录MySQL登录MySQL用Navicat连接MySQL 安装 选择“我同意”,点击下一步。 选择安装的目标文件夹,点击下一步。 点击下一步。 点击下一步。 点击安装。 软件安装需要一些时间,请耐心等待 点击“完成”。 注册 输入 密钥&#x…

Crypto-RSA3

题目:(BUUCTF在线评测 (buuoj.cn)) 共模攻击 ​ 前提:有两组及以上的RSA加密过程,而且其中两次的m和n都是相同的,那么就可以在不计算出d而直接计算出m的值。 ​ 设模数为n,两个用户的公钥分别为…

全栈笔记_浏览器扩展篇(manifest.json文件介绍)

manifest.json介绍 是web扩展技术必不可少的插件配置文件,放在根目录作用: 指定插件的基本信息 name:名称manifest_version:manifest.json文件的版本号,可以写2或3version:版本description:描述定义插件的行为: browser_action:添加一个操作按钮到浏览器工具栏,点击按…

LeetCode 0103.二叉树的锯齿形层序遍历:层序遍历 + 适时翻转

【LetMeFly】103.二叉树的锯齿形层序遍历:层序遍历 适时翻转 力扣题目链接:https://leetcode.cn/problems/binary-tree-zigzag-level-order-traversal/ 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往…

关于C++中的深拷贝

说到深拷贝,是相对于浅拷贝而言的。弄清了浅拷贝,深拷贝也就不言自明了。对C初学者而言,所谓浅拷贝在编写程序过程中往往是无感的。我们一般在写一个类时,多数情况我们只是写了成员变量、成员函数,有时为了赋初值方便&…

Java与JavaScript同源不同性

Java是目前编程领域使用非常广泛的编程语言,相较于JavaScript,Java更被人们熟知。很多Java程序员想学门脚本语言,一看JavaScript和Java这么像,很有亲切感,那干脆就学它了,这也间接的帮助了JavaScript的发展…

HTML | DOM | 网页前端 | 常见HTML标签总结

文章目录 1.前端开发简单分类2.前端开发环境配置3.HTML的简单介绍4.常用的HTML标签介绍 1.前端开发简单分类 前端开发,这里是一个广义的概念,不单指网页开发,它的常见分类 网页开发:前端开发的主要领域,使用HTML、CS…

OpenCV中的边缘检测技术及实现

介绍: 边缘检测是计算机视觉中非常重要的技术之一。它用于有效地识别图像中的边缘和轮廓,对于图像分析和目标检测任务至关重要。OpenCV提供了多种边缘检测技术的实现,本博客将介绍其中的两种常用方法:Canny边缘检测和Sobel边缘检测。 理论介…

【C语言】(25)文件包含include

#include是C语言中的预处理指令之一,用于在当前文件中包含另一个文件的内容。用于模块化和代码重用的基本机制。合理使用#include可以使代码结构更加清晰,易于管理和维护。 #include主要用于包含标准库头文件或自定义头文件。 两种形式的#include #in…

C语言程序设计(第四版)—习题7程序设计题

目录 1.选择法排序。 2.求一批整数中出现最多的数字。 3.判断上三角矩阵。 4.求矩阵各行元素之和。 5.求鞍点。 6.统计大写辅音字母。 7.字符串替换。 8.字符串转换成十进制整数。 1.选择法排序。 输入一个正整数n(1<n≤10)&#xf…

简易绘图软件(水一期)

哈哈&#xff01; 1、编写代码&#xff1a; 代码&#xff1a; main: #include <graphics.h> #include <music.h> #include <heker.h> #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )using…

在数组中插入元素

问题&#xff1a;假设有一个数组{1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5}&#xff0c;如果我们要在3之后插入一个数&#xff08;520&#xff09;&#xff0c;这该怎么办呢&#xff1f; 思路&#xff1a;要想在以元素3之后插入一个元素&#xff0c;我们先要做…

25天物理探索旅程 - 第四天:光的奇妙旅程揭秘

第四天&#xff0c;我们的科普探险队将踏上一段非凡的旅程&#xff0c;目标是揭开光——这位宇宙间最具魔法特质的信使的秘密面纱。今天&#xff0c;我们将以一种轻松愉快、幽默风趣的方式探讨光的本质&#xff0c;像看一场生动有趣的魔术表演般&#xff0c;领略光那波粒二象性…

react中如何做到中断diff过程和恢复

workLoop是 实现时间切片 和 可中断渲染的核心&#xff0c;简要说明如下&#xff1a; // 并发任务的入口function workLoopConcurrent() {// Perform work until Scheduler asks us to yield// 有任务 & 是否需要中断while (workInProgress ! null && !shouldYiel…