
Tengo file.json
en la estructura de:
{
"connections": {}
}
Quiero actualizar el objeto de conexiones con variables $1
y $2
. Lo estoy intentando:
jq --arg ssid "$1" --arg pass "$2" '.connections.$ssid = "$pass"' file.json > tmp.json && mv tmp.json file.json
pero estoy regresandojq: 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
producir:
{
"connections": {key:"value"}
}
¿Cómo puedo actualizar el objeto con múltiples argumentos?
Respuesta1
tienes que usar[]
indexaciónutilizar variables (o cualquier cosa no literal) como clave:
jq --arg ssid abc --arg pass 123 '.connections[$ssid] = $pass' < file.json
{
"connections": {
"abc": "123"
}
}
Aquí [$ssid]
indexa .connections
con el valor de $ssid
como clave. El error estaba en " .$
", que es un error de sintaxis, en lugar de tener que ver con múltiples variables.
variablesno se sustituyen directamente como cadenas como lo harían en un script de shell, sino que en realidad son enlaces léxicos con nombre que deben usarse en el contexto de la expresión. El índice podría ser una expresión más compleja: .connections[$ssid + "X"] = $pass
primero pondría una X al final y la usaría como clave.