我想在shell中创建地图.每个值都是一个数组.所以地图是关键:数组对.例如,它可以是这样的:
"Key1" : a1 a2 a3 a4 "key2" : b1 b2 b3 "key3" : c1
基本上我的代码看起来像这样
listService(){ serviceType=$1 servicesList=($(getServices $serviceType)) } listService serviceTypeA listService serviceTypeB listService serviceTypeC
这getServices
是一个函数,它根据传递的参数返回一个服务数组$serviceType
.因此每次我调用该listService
函数时,我serviceList
都会被新服务列表覆盖.但我希望以不同的服务类型保留所有服务,如下所示:
"serviceA" : a1 a2 a3 a4 "serviceB" : b1 b2 b3 "serviceC" : c1
之后,我想基于密钥访问每个阵列.如何实现这一目标.
在此先感谢您的帮助.
编辑:我尝试了@cdarke提供的答案.这是我现在的代码:
#!/bin/bash declare -A arrayMap getValues(){ key=$1 case $key in AAA ) arr=( AA AAA AAAA ) ;; BBB ) arr=( BB BB BBBB ) ;; CCC ) arr=() ;; esac echo "${arr[@]}" } fillArrayMap(){ param=$1 values=( $(getValues $param) ) printf "\nIn $param\n" echo -e "\nArray values is: ${values[@]}\n" printf "\nLength of the array values is : ${#values[@]}\n" arrayMap["$param"]=$values #THIS IS THE KEY LINE valuesList=${arrayMap[$param]} echo -e "\nArray valuesList is: ${valuesList[@]}\n" printf "\nLength of the array valuesList is : ${#valuesList[@]}\n" } fillArrayMap AAA fillArrayMap BBB fillArrayMap CCC
现在从输出我可以看到valuesList
只获得values
数组的第一个元素.但我想valuesList
包含该方法返回的所有元素getValues
.即
valuesList= ${arrayMap[$param]}
现在valuesList
应该包含所有元素,而现在它只包含1个元素.如何解决?
注意:我的目标是访问每个单独的元素,如AAA或AA,我不需要像AA AAA AAAA这样的字符串作为一个整体