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

  • 相关阅读:
    Python核心知识点速查表,长图+26页pdf
    着手社区建设掌握的两个概念
    【信号去噪】基于麻雀算法优化VMD实现信号去噪附matlab代码
    [THUPC2022初赛]搬砖
    Java测试(10)--- selenium
    彻底理解零拷贝技术
    【Leetcode Sheet】Weekly Practice 7
    【JavaSE】多线程篇(二)线程终止、线程中断与线程插队
    七个步骤 从零到servlet第一个hello
    「C系列」C 文件读写
  • 原文地址:https://blog.csdn.net/Purpleendurer/article/details/134053506