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

相关推荐
曲径海盗9 小时前
【Python 学习第 55 天】列表基础
python·学习笔记·编程入门
lzx_00210 小时前
Linux 进程(三) 从进程状态到僵尸进程、孤儿进程
linux·服务器
FlightYe12 小时前
音视频修炼之容器与协议(四):RTSP详解
android·linux·ffmpeg·音视频·dash
刘马想放假13 小时前
CANviz 使用指南|Linux 安装、DBC 解码、实时曲线与 J1939 实战
linux·python·websocket
kloc14 小时前
聊天室项目入口网关子服务的实现
linux·c++
GeW14 小时前
深圳APEC峰会倒计时:数据库与Linux运维的"隐形考场"
linux
梦到啥说啥15 小时前
Linux网络编程:UDP网络协议
linux·网络协议·udp
无足鸟ICT17 小时前
【RHCA+】ipcrm命令(删除IPC资源)
linux
星恒随风18 小时前
MySQL 从零入门(四):表的增删改查与基础查询详解
linux·服务器·数据库·笔记·mysql
陈希12320 小时前
Linux 网络诊断工具实战:ping、curl、tcpdump、mtr、dig 用法详解
linux·网络·tcpdump