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

相关推荐
A小辣椒2 天前
TShark:Wireshark CLI 功能
linux
A小辣椒2 天前
TShark:基础知识
linux
AlfredZhao2 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao3 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334663 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪3 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩4 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言