关于数组的下标,人们通常会想它应该是正整数或非负整数,这也容易理解和接受。实际上,Bash4以上的版本,像Perl语言一样,数组的下标可以不是整数了。这样的数组叫做关联数组(Associative Arrays),也称为哈希(hash)或映射(mapping)。运行help declare,查看内置命令declare的帮助,如果能看到选项-A,就说明正在使用的Bash支持关联数组。上一节讲的数组叫索引数组(Indexed Arrays)。
如果用数组记录人的年龄,或者记录水果的价格,可以将人或者水果的编号作为数组下标,但还需要存储人名(水果名)与人的编号(水果编号)的对应关系。如果把人名或者水果名直接作为数组下标,是不是很方便?通过例子,可以知道其方便之处,用declare加选项-A定义如下两个关联数组:
定义了关联数组age,它记录了Mike、Jack和Tom的年龄,分别是28、35和19;定义了关联数组price,它记录了apple、banana和orange的价格,分别是5.5、2.3和1.5。查看一下,定义成功:
从上面的结果可见,显示出来的元素的顺序和定义时的顺序是不同的,因为它们是用散列法存储,而不是像普通数组那样使用顺序存储。
这时,可以查询Tom的年龄和apple的价格:(www.xing528.com)
定义了关联数组,再查询某人的年龄,或者某种水果的价格,比普通数组更方便、更明了。关联数组age当中的人名Jack、Tom和Mike不叫数组下标了,而叫键(key);35、19和28是对应的值(value)。查看关联数组age的全部的键和相应的值:
同样可以用readonly -A加关联数组名或者declare -Ar加关联数组名使它成为只读关联数组,不能用unset命令取消只读关联数组的定义,也不能改变只读关联数组的定义。
命令declare -Ap可以显示当前shell的所有的关联数组,命令declare -ap显示所有的普通数组(索引数组)。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。