首页 > 技术文章 > linux 关联数组

jiaoyaxiong 2020-05-26 11:19 原文

 

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

转载:https://www.jb51.net/article/67103.htm

 

一、数组和关联数组

数组是Shell脚本非常重要的组成部分,它借助索引将多个独立的独立的数据存储为一个集合。普通数组只能使用整数作为数组索引,关联数组不仅可以使用整数作为索引,也可以使用字符串作为索引。通常情况下,使用字符串做索引更容易被人们理解。Bash从4.0之后开始引入关联数组。

二、定义打印普通数组

数组的方法有如下几种:
复制代码代码如下:

#在一行上列出所有元素
array_var=(1 2 3 4 5 6)
#以“索引-值”的形式一一列出
array_var[0]="test1"
array_var[1]="test2"
array_var[2]="test3"
注意:第一种方法要使用圆括号,否则后面会报错。

数组元素的方法有如下几种:
复制代码代码如下:

echo ${array_var[0]} #输出结果为 test1
index=2
echo ${array_var[$index]} #输出结果为 test3
echo ${array_var[*]} #输出所有数组元素
echo ${array_var[@]} #输出所有数组元素
echo ${#array_var[*]} #输出值为 3
注意:在ubuntu 14.04中,shell脚本要以#!/bin/bash开头,且执行脚本的方式为 bash test.sh。

三、定义打印关联数组

定义关联数组
在关联数组中,可以使用任何文本作为数组索引。定义关联数组时,首先需要使用声明语句将一个变量声明为关联数组,然后才可以在数组中添加元素,过程如下:
复制代码代码如下:

declare -A ass_array #声明一个关联数组
ass_array=(["index1"]=index1 ["index2"]=index2)#内嵌“索引-值”列表法
ass_array["index3"]=index3
ass_array["index4"]=index4

echo ${ass_array["index1"]} #输出为index1
echo ${ass_array["index4"]}

echo ${!ass_array[*]} #输出索引列表
echo ${!ass_array[@]} #输出索引列表

注意:对于普通数组,使用上面的方法依然可以列出索引列表,在声明关联数组以及添加数组元素时,都不能在前面添加美元符$

 

 

转载:

 

关联数组从Bash 4.0版本开始被引入。借助散列技术,关联数组成为解决很多问题的有力工具。接下来就让我们一探究竟。
1. 定义关联数组
在关联数组中,我们可以用任意的文本作为数组索引。首先,需要使用声明语句将一个变量名声明为关联数组。像下面这样:

[rhx@localhost Test]$declare -A ass_array
声明之后,可以用两种方法将元素添加到关联数组中。
 利用内嵌“索引-值”列表的方法,提供一个“索引-值”列表:
$ ass_array=([index1]=val1 [index2]=val2)
 使用独立的“索引-值”进行赋值:
$ ass_array[index1]=val1
$ ass_array'index2]=val2
举个例子,试想如何用关联数组为水果制定价格:

[rhx@localhost Test]$ declare -A fruit_value
[rhx@localhost Test]$ fruit_value=([apple]="100"[orange]="150")
[rhx@localhost Test]$ echo ${fruit_value[apple]}


2. 列出数组索引
每一个数组元素都有一个索引用于查找。普通数组和关联数组具有不同的索引类型。我们可以用下面的方法获取数组的索引列表:
$ echo ${!array_var[*]}
也可以使用:
$ echo ${!array_var[@]
以先前提到的fruits_value数组为例,运行如下命令:
$ echo ${!fruits_value[*]}
orange apple
对于普通数组,这个方法同样可行
————————————————
版权声明:本文为CSDN博主「止语---」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/rhx_qiuzhi/java/article/details/79767426

 

获取所有元素的下标和值
使用下面的形式可以获得关联数组的所有元素值:
${array_name[@]}
${array_name[*]}

使用下面的形式可以获取关联数组的所有下标值:
${!array_name[@]}
${!array_name[*]}

获取关联数组长度
使用下面的形式可以获得关联数组的长度:
${#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

 

推荐阅读