Realmente me gusta la sugerencia de @Michel. A veces, realmente puede extraer el valor de algunas variables para ejecutar una tarea en ese servidor específico usando BASH. Entonces, las variables deseadas son conocidas. El uso de este enfoque es la forma de evitar o hacer múltiples llamadas a jq para establecer un valor por variable o incluso usar la declaración de lectura con múltiples variables en las que algunas pueden ser válidas y vacías, lo que lleva a un cambio de valor (ese fue mi problema)
mi enfoque anterior de que el plomo conducirá a un error de cambio de valor si .svID [] .ID = "" ( sv obtendrá el valor de slotID
-rd '\n' getInfo sv slotID <<< $(jq -r '(.infoCMD // "no info"), (.svID[].ID // "none"), (._id // "eeeeee")' <<< $data)
Si descargó el objeto usando curl, aquí está mi enfoque para cambiar el nombre de algunas variables a un nombre descriptivo como extraer datos de matrices de datos
El uso de eval y los filtros resolverá el problema con una línea y producirá variables con el nombre deseado.
eval "$(jq -r '.[0] | {varNameExactasJson, renamedVar1: .var1toBeRenamed, varfromArray: .array[0].var, varValueFilter: (.array[0].textVar|ascii_downcase)} | to_entries | .[] | .key + "=\"" + (.value | tostring) + "\""' <<< /path/to/file/with/object )"
La ventaja en este caso es el hecho de que filtrará, cambiará el nombre y formateará todas las variables deseadas en el primer paso. Observe que allí hay. [0] | eso es muy común tener si la fuente es de un servidor API RESTFULL usando GET, datos de respuesta como:
[{"varNameExactasJson":"this value", "var1toBeRenamed: 1500, ....}]
Si sus datos no son de una matriz, es decir. es un objeto como:
{"varNameExactasJson":"this value", "var1toBeRenamed: 1500, ....}
simplemente elimine el índice inicial:
eval "$(jq -r '{varNameExactasJson, renamedVar1: .var1toBeRenamed, varfromArray: .array[0].var, varValueFilter: (.array[0].textVar|ascii_downcase)} | to_entries | .[] | .key + "=\"" + (.value | tostring) + "\""' <<< /path/to/file/with/object )"
Esta es una vieja pregunta, pero sentí compartir, ya que era difícil de encontrar
declare -- “$key=$value”
y hacer que$AUTHOR
etc. funcione como en el original, sin una matriz. Todavía es más seguro que eval, aunque cambiarPATH
o algo todavía es posible, por lo que es menos que esta versión.