Arquivo JSON
Atual
{
"auths": {
"test": {
"auth": "testserfdddd"
}
}
}
Desejado
{
"auths": {
"test": {
"auth": "testserfdddd"
},
"myrepo.com" {
"auth": "passworder"
}
}
}
Testes
Como um teste simples na linha de comando, executo o seguinte:
cat .docker/config.json | jq '.auths += {"myrepo.com": {"auth": "passworder"}}'
o resultado é o que eu desejo
{
"auths": {
"test": {
"auth": "testserfdddd"
},
"repo.com": {
"auth": "test"
}
}
}
No entanto, desejo executar a mesma lógica através de um script bash.
Script Bash
REPO=repo.com
PASSWD=passworder
$JQ --arg repo "$REPO" --arg passwd "$PASSWD" '.auths.[$repo] += {"auth": $passwd}' .docker/config.json
No entanto, isso substitui o test.auth
e repo.com.auth
não adiciona à auths
chave
o resultado ao executar o script bash fornece o seguinte resultado
{
"auths": {
"repo.com": {
"auth": "passworder
}
}
}
o objeto anterior é completamente sobrescrito. Qual é geralmente o padrão que eu preciso adaptar aqui na jq
expressão? Como o argumento repo
é exclusivo ( test
não é o mesmo que repo.com
), por que a +=
operação não está funcionando no script bash?
JQ requer que a chave seja colocada entre parênteses:
Usando uma sintaxe ligeiramente simplificada em comparação com a resposta da White Owl :
If
auth
é a única chave no objeto folha, ou se é garantido que o objeto folha ainda não existe: