当前位置:  开发笔记 > 编程语言 > 正文

如何创建key的映射:shell中的数组?

如何解决《如何创建key的映射:shell中的数组?》经验,为你挑选了0个好方法。

我想在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这样的字符串作为一个整体

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有