Bash 및 키-값 쌍 또는 맵

Bash 및 키-값 쌍 또는 맵

우리는 기본적으로 Python 사전의 작업을 수행하는 bash 스크립트를 작성하고 있습니다. 다음은 우리가 사용하고 있는 코드와 예상되는 출력입니다.

#!/bin/bash
declare -A serviceTag
serviceTag["source"]="ccr"
declare -A services
services+=( ["dataservice"]="latest" )

serviceTag+=( ["services"]=services )

echo "$serviceTag"

예상 출력은 다음과 같습니다.

{"source":"ccr","services":{"datasetvice":"latest"}}

하지만 우리가 얻는 것은

ccrservices

우리가 여기서 저지르는 실수를 도와줄 수 있는 사람이 있나요? bash와 해당 코드를 사용하여 이를 어떻게 달성할 수 있나요?

감사합니다, 칸투

답변1

GNU 프로젝트의 Bash 참조 매뉴얼에 따르면,Bash 배열은 1차원입니다., 색인화되었거나 연관되어 있는지 여부. 즉, 중첩할 수 없습니다. 나쁜 소식을 전하게 되어 유감이지만, 당신이 하려는 일은 불가능할 것 같습니다.

답변2

확실하지는 않지만 시도해 볼 수 있습니다.

printf '{"%s":"%s","%s":"%s":{"%s":"%s"}}\n' "${!serviceTag[@]}" "${serviceTag[@]}" "${!services[@]}" "${services[@]}" 

답변3

이는 쉘 스크립팅에 적합한 작업이 아닙니다. 이 작업에는 자신에게 유리한 프로그래밍 언어를 사용하십시오. PHP를 예로 들어보겠습니다.

<?php
$services = ['dataservive' => 'latest'];
$serviceTag['source'] = 'ccr';
$serviceTag['services'] = $services;
# example 1
print_r($serviceTag);
# exmaple 2
echo json_encode($serviceTag), "\n";

결과:

Array (
   [source] => ccr
   [services] => Array (
      [dataservive] => latest
   )
)
{"source":"ccr","services":{"dataservive":"latest"}}

관련 정보