シェルでマップを作成したいと思います。各値は配列です。したがって、マップはキーです:配列のペア。例えばそれは、このようなことができます:キーのマップを作成するには: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のような個々の要素にアクセスすることで、私はbashは多次元配列をサポートしていますが、私はありません
gawkは2次元配列を持っています(実際にはhastableでインプリメントされています)。 – Kent
であなたの他のロジックをドラッグするかawkを使うことが考えられます。 ;-) – Kent