Eu realmente gosto da sugestão @Michel. Às vezes, você pode realmente apenas extrair o valor de algumas variáveis para executar uma tarefa nesse servidor específico usando o BASH. Portanto, as variáveis desejadas são conhecidas. O uso dessa abordagem é a maneira de evitar ou várias chamadas para jq para definir um valor por variável ou até mesmo usar a instrução read com várias variáveis nas quais algumas podem ser válidas e vazias, levando a uma mudança de valor (esse era o meu problema).
minha abordagem anterior de que o lead levará a um erro de mudança de valor se .svID [] .ID = "" ( sv obterá o valor do slotID
-rd '\n' getInfo sv slotID <<< $(jq -r '(.infoCMD // "no info"), (.svID[].ID // "none"), (._id // "eeeeee")' <<< $data)
Se você baixou o objeto usando curl, aqui está minha abordagem para renomear algumas variáveis para um nome amigável, como extrair dados de matrizes de dados
usar eval e filtros resolverá o problema com uma linha e produzirá variáveis com o nome desejado
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 )"
A vantagem, neste caso, é o fato de filtrar, renomear e formatar todas as variáveis desejadas na primeira etapa. Observe que existe. [0] | é muito comum ter, se a origem for de um servidor RESTFULL API usando GET, dados de resposta como:
[{"varNameExactasJson":"this value", "var1toBeRenamed: 1500, ....}]
Se seus dados não são de uma matriz, ou seja. é um objeto como:
{"varNameExactasJson":"this value", "var1toBeRenamed: 1500, ....}
basta remover o í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 é uma pergunta antiga, mas senti compartilhar, pois era difícil encontrar
declare -- “$key=$value”
atribuir a tarefa com, e$AUTHOR
etc, trabalhar como no original, sem uma matriz. Ainda é mais seguro do que avaliar, embora a alteraçãoPATH
ou algo ainda seja possível, menos ainda do que esta versão.