我们正在编写一个 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"}}