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

2024-02-17 08:52

本文主要是介绍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)

这篇关于Shell - 学习笔记 - 2.15 - Shell关联数组(下标是字符串的数组)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/717281

相关文章

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Java中字符串转时间与时间转字符串的操作详解

《Java中字符串转时间与时间转字符串的操作详解》Java的java.time包提供了强大的日期和时间处理功能,通过DateTimeFormatter可以轻松地在日期时间对象和字符串之间进行转换,下面... 目录一、字符串转时间(一)使用预定义格式(二)自定义格式二、时间转字符串(一)使用预定义格式(二)自

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

Java字符串处理全解析(String、StringBuilder与StringBuffer)

《Java字符串处理全解析(String、StringBuilder与StringBuffer)》:本文主要介绍Java字符串处理全解析(String、StringBuilder与StringBu... 目录Java字符串处理全解析:String、StringBuilder与StringBuffer一、St

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

SQL表间关联查询实例详解

《SQL表间关联查询实例详解》本文主要讲解SQL语句中常用的表间关联查询方式,包括:左连接(leftjoin)、右连接(rightjoin)、全连接(fulljoin)、内连接(innerjoin)、... 目录简介样例准备左外连接右外连接全外连接内连接交叉连接自然连接简介本文主要讲解SQL语句中常用的表

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

SpringShell命令行之交互式Shell应用开发方式

《SpringShell命令行之交互式Shell应用开发方式》本文将深入探讨SpringShell的核心特性、实现方式及应用场景,帮助开发者掌握这一强大工具,具有很好的参考价值,希望对大家有所帮助,如... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定