
Tenho file.json
na estrutura de:
{
"connections": {}
}
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"
Espero script.sh value key
produzir:
{
"connections": {key:"value"}
}
Como posso atualizar o objeto com vários argumentos
Responder1
Você tem que usar[]
indexaçãopara usar variáveis (ou qualquer coisa não literal) como chave:
jq --arg ssid abc --arg pass 123 '.connections[$ssid] = $pass' < file.json
{
"connections": {
"abc": "123"
}
}
Aqui [$ssid]
indexa .connections
com o valor de $ssid
como chave. O erro estava em " .$
", que é um erro de sintaxe, e não relacionado a múltiplas variáveis.
Variáveisnão são substituídos diretamente como strings da maneira que poderiam ser em um script de shell, mas são ligações lexicais nomeadas reais que devem ser usadas no contexto de expressão. O índice poderia ser uma expressão mais complexa: .connections[$ssid + "X"] = $pass
colocaria primeiro um X no final e usaria isso como chave.