bash数组应用之:关联数组

关联数组 (associative arrays)

  1. 什么是关联数组

关联数组是支持下标不是数字的数组,比如字符串。

  1. 关联数组的定义

关联数组必须通过"-A"显式的定义:typeset -A MYARR
如果没有显式定义的话,那么就是一个普通数组,普通数组不支持字符串下标。

  1. 关联数组的定义例子
typeset -A MYARR=([aa]=AA [bb]=BB [cc]=CC [dd]=DD [ee]=EE)

echo "["${!MYARR[@]}"]"          # [dd aa ee bb cc]
echo "["${MYARR[@]}"]"          # [DD AA EE BB CC]

这个地方有一点疑问的是,关联数组是按什么顺序排序的?因为我们看到输出并没有按照aa,bb,cc,dd,ee的顺序输出。答案是:关联数组并不是按照字母顺序排列的,也不是按照定义的顺序排列的,而是根据hash值排列的,所以简单的说,关联数组并不是按照通常可见的顺序排列的;如果用户需要排序,那么必须使用普通数组,或者使用其他的替代方法,例如两个数组模拟的方法。

或者:

typeset -A MYARR

MYARR[aa]=AA
MYARR[bb]=BB
MYARR[cc]=CC
MYARR[dd]=DD
MYARR[ee]=EE
echo "["${!MYARR[@]}"]"          # [dd aa ee bb cc]
echo "["${MYARR[@]}"]"          # [DD AA EE BB CC]

如果没有显示的定义成关联数组,那么就当普通数组处理:

MYARR[aa]=AA
MYARR[bb]=BB
MYARR[cc]=CC
MYARR[dd]=DD
MYARR[ee]=EE
echo "["${!MYARR[@]}"]"          # [0]
echo "["${MYARR[@]}"]"          # [EE]

或者

typeset -a MYARR
MYARR[aa]=AA
MYARR[bb]=BB
MYARR[cc]=CC
MYARR[dd]=DD
MYARR[ee]=EE
echo "["${!MYARR[@]}"]"          # [0]
echo "["${MYARR[@]}"]"          # [EE]

因为"-a"定义的是普通数组。
或者:

MYARR=([aa]=AA [bb]=BB [cc]=CC [dd]=DD [ee]=EE)
echo "["${!MYARR[@]}"]"          # [0]
echo "["${MYARR[@]}"]"          # [EE]

MYARR也是普通数组。

MYARR=([aa]=AA [bb]=BB [cc]=CC [dd]=DD [ee]=EE)
echo "["${!MYARR[@]}"]"          # [0]
echo "["${MYARR[@]}"]"          # [EE]
  1. 关联数组的引用

关联数组的使用和普通数组是一样的。

typeset -A MYARR=([aa]=AA [bb]=BB [cc]=CC [dd]=DD [ee]=EE)

echo "["${MYARR[aa]}"]"          # [AA]
echo "["${MYARR[ee]}"]"          # [EE]
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容