우리는 기본적으로 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"}}