jq agrega o actualiza un valor con múltiples --arg

jq agrega o actualiza un valor con múltiples --arg

Tengo file.jsonen la estructura de:

{
  "connections": {}
}

Quiero actualizar el objeto de conexiones con variables $1y $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 keyproducir:

{
  "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 .connectionscon el valor de $ssidcomo 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"] = $passprimero pondría una X al final y la usaría como clave.

información relacionada