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

相关推荐
孤客网络科技工作室4 分钟前
VMware 虚拟机使用教程及 Kali Linux 安装指南
linux·虚拟机·kali linux
颇有几分姿色1 小时前
深入理解 Linux 内存管理:free 命令详解
linux·运维·服务器
AndyFrank1 小时前
mac crontab 不能使用问题简记
linux·运维·macos
筱源源2 小时前
Kafka-linux环境部署
linux·kafka
算法与编程之美2 小时前
文件的写入与读取
linux·运维·服务器
xianwu5433 小时前
反向代理模块
linux·开发语言·网络·git
Amelio_Ming3 小时前
Permissions 0755 for ‘/etc/ssh/ssh_host_rsa_key‘ are too open.问题解决
linux·运维·ssh
Ven%4 小时前
centos查看硬盘资源使用情况命令大全
linux·运维·centos
TeYiToKu4 小时前
笔记整理—linux驱动开发部分(9)framebuffer驱动框架
linux·c语言·arm开发·驱动开发·笔记·嵌入式硬件·arm
dsywws4 小时前
Linux学习笔记之时间日期和查找和解压缩指令
linux·笔记·学习