博客园  :: 首页  :: 管理

关于shell中的数组-关联数组-associative array

Posted on 2021-08-23 10:58  520_1351  阅读(586)  评论(0编辑  收藏  举报

在bash-shell中,数组主要分2种,indexed array 和 associative array

在linux下对于新版的bash,一般都是支持关联数组,关联数组有点像其他语言的字典一样,键值对形式

注:对于关联数组,对于元素(键值对),是无序的,在遍历时,或者输出全部键/值,可以观察出,关联数组也不支持二维及多维数组

关于本文,如需要转载,注明出处:https://www.cnblogs.com/5201351

如有问题,也可以联系笔者QQ:5201351

例如,我们可以创建一个叫做 color 的关联数组,并用颜色名字作为下标

不同于普通数组,关联数组必须使用带有-A选项的 declare 命令进行显示声明的方式创建

declare -A color
color[black]=#000000
color["red"]="#ff0000"
color["green"]="#00ff00"
color["blue"]="#0000ff"

也可以在定义的同时赋值,每个键值对,使用空格隔开:

笔者测试过,不加declare -A显示声明,数组还是会被视为索引数组,就一个元素,而且是取的最后一个键对应的值

declare -A color=([black]=#000000 ["red"]="#ff0000" ["green"]="#00ff00" ["blue"]="#0000ff")

访问关联数组元素,需要指定键,以上例为准,如果不指定键,将返回空值:

${color[black]}

获取所有的关联数组元素的值:

${array_name[@]}

${array_name[*]}

获取所有的关联数组元素的键:
${!array_name[@]}

${!array_name[*]}

关于@与*的区别:如shell脚本特殊变量一样,可以通过for循环时,对数组变量加上双引号看出微小的区别

如"${array_name[@]}"和"${array_name[*]}" ,因此有些场景可能使用@可能更合适一点,但大多数情况下两者没有区别的

 

尊重别人的劳动成果 转载请务必注明出处:https://www.cnblogs.com/5201351/p/15175013.html