Bash 和键值对或映射

Bash 和键值对或映射

我们正在编写一个 bash 脚本,它基本上完成了 python 字典的工作。下面是我们正在使用的代码 siffet 和预期的输出。

#!/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 的数组是一维的,无论它们是索引的还是关联的。这意味着你不能嵌套它们。很抱歉带来坏消息,但我认为你想要做的事情是不可能的。

答案2

不确定,但你可以尝试。

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

答案3

这不是适合 shell 脚本编写的任务。帮自己一个忙,使用编程语言来完成这项任务。以 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"}}

相关内容