我想在
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这样的字符串作为一个整体
Bash不支持多维数组,但我认为你不需要.您可以在数组元素中以列表的形式存储字符串,这将为您提供所需的信息.
原文链接:https://www.f2er.com/bash/383297.html# My made-up version of getServices getServices() { nm="$1" last=${nm##*Type} retn=(${last}1 ${last}2 ${last}3 ${last}4) echo "${retn[@]}" } declare -A serviceList listService(){ serviceType="$1" # Here I use the key to make an assignment,which adds to the hash serviceList["$serviceType"]=$(getServices $serviceType) } listService serviceTypeA listService serviceTypeB listService serviceTypeC for key in ${!serviceList[@]} do echo "\"$key\": ${serviceList[$key]}" done
得到:
"serviceTypeC": C1 C2 C3 C4 "serviceTypeB": B1 B2 B3 B4 "serviceTypeA": A1 A2 A3 A4
编辑新问题:
改变:
arrayMap["$param"]=$values # THIS IS THE KEY LINE valuesList=${arrayMap[$param]}
至:
arrayMap["$param"]=${values[@]} valuesList=( ${arrayMap[$param]} )
当你通过它的名字($values)引用数组变量时,你只得到第一个元素.