Shell - 学习笔记 - 2.15 - Shell关联数组(下标是字符串的数组)

现在最新的 Bash Shell 已经支持关联数组了。关联数组使用字符串作为下标,而不是整数,这样可以做到见名知意。

关联数组也称为“键值对(key-value)”数组,键(key)也即字符串形式的数组下标,值(value)也即元素值。

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

declare -A color

color["red"]="#ff0000"

color["green"]="#00ff00"

color["blue"]="#0000ff"

也可以在定义的同时赋值:

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

不同于普通数组,关联数组必须使用带有-A选项的 declare 命令创建。关于 declare 命令的详细用法请访问:Shell declare和typeset命令:设置变量属性

访问关联数组元素

访问关联数组元素的方式几乎与普通数组相同,具体形式为:

array_name["index"]

例如:

color["white"]="#ffffff"

color["black"]="#000000"

加上${}即可获取数组元素的值:

${array_name["index"]}

例如:

echo ${color["white"]}

white=${color["black"]}

获取所有元素的下标和值

使用下面的形式可以获得关联数组的所有元素值:

${array_name[@]}

${array_name[*]}

使用下面的形式可以获取关联数组的所有下标值:

${!array_name[@]}

${!array_name[*]}

普通shell数组也可以使用这个方法获得所有下标值。

获取关联数组长度

使用下面的形式可以获得关联数组的长度:

${#array_name[*]}

${#array_name[@]}

关联数组实例演示:

#!/bin/bash

declare -A color

color["red"]="#ff0000"

color["green"]="#00ff00"

color["blue"]="#0000ff"

color["white"]="#ffffff"

color["black"]="#000000"

#获取所有元素值

for value in ${color[*]}

do

    echo $value

done

echo "****************"

#获取所有元素下标(键)

for key in ${!color[*]}

do

    echo $key

done

echo "****************"

#列出所有键值对

for key in ${!color[@]}

do

    echo "${key} -> ${color[$key]}"

done

运行结果:

#ff0000

#0000ff

#ffffff

#000000

#00ff00

****************

red

blue

white

black

green

****************

red -> #ff0000

blue -> #0000ff

white -> #ffffff

black -> #000000

green -> #00ff00

运行前面的例子,如果出现错误提示:

bash: declare: color: cannot convert indexed to associative array

则可能是bash版本没有到4.0,或者是这个变量前面已经定义过了,比如使用source命令执行脚本,而当前进程已经定义过这个变量了。

参考:

Shell关联数组(下标是字符串的数组) (biancheng.net)

  • 17
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜流冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值