Tenho file.json
na estrutura de:
{
"connections": {}
}
Eu quero atualizar o objeto de conexões com variáveis $1
e arquivos $2
. Estou tentando:
jq --arg ssid "$1" --arg pass "$2" '.connections.$ssid = "$pass"' file.json > tmp.json && mv tmp.json file.json
Mas estou voltandojq: error: syntax error, unexpected '$', expecting FORMAT or QQSTRING_START (Unix shell quoting issues?) at <top-level>, line 1:
.connections.$ssid = "$pass"
Estou esperando script.sh value key
produzir:
{
"connections": {key:"value"}
}
Como posso atualizar o objeto com vários argumentos
Você tem que usar a
[]
indexação para usar variáveis (ou qualquer coisa não literal) como a chave:Aqui
[$ssid]
indexa.connections
com o valor de$ssid
como a chave. O erro estava em ".$
", que é um erro de sintaxe, em vez de várias variáveis.As variáveis não são substituídas diretamente como strings da maneira que podem ser em um script de shell, mas são ligações lexicais nomeadas reais que devem ser usadas no contexto da expressão. O índice poderia ser uma expressão mais complexa:
.connections[$ssid + "X"] = $pass
colocaria um X no final primeiro e o usaria como chave.