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

相关推荐
wVelpro3 小时前
如何在Pycharm 2025.3 版本实现虚拟环境“Make available to all projects”
linux·ide·pycharm
程序员老舅3 小时前
C++高并发精髓:无锁队列深度解析
linux·c++·内存管理·c/c++·原子操作·无锁队列
雨中风华4 小时前
Linux, macOS系统实现远程目录访问(等同于windows平台xFsRedir软件的目录重定向)
linux·windows·macos
爱吃生蚝的于勒4 小时前
【Linux】进程信号之捕捉(三)
linux·运维·服务器·c语言·数据结构·c++·学习
The森4 小时前
Linux IO 模型纵深解析 01:从 Unix 传统到 Linux 内核的 IO 第一性原理
linux·服务器·c语言·经验分享·笔记·unix
翼龙云_cloud5 小时前
腾讯云代理商: Linux 云服务器搭建 FTP 服务指南
linux·服务器·腾讯云
纤纡.5 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
好好学习天天向上~~5 小时前
6_Linux学习总结_自动化构建
linux·学习·自动化
冉佳驹5 小时前
Linux ——— 静态库和动态库的设计与使用
linux·动态库·静态库·fpic
陌上花开缓缓归以6 小时前
linux mtd-utils使用源码分析(ubuntu测试版)
linux·arm开发·ubuntu