Eu honestamente não tenho certeza de onde você obtém a saída que você diz que está recebendo, mas o código shell que você está usando é excessivamente complexo, chamando quatro utilitários externos em cada iteração (exceto o que some_function
pode estar fazendo).
Aqui está uma implementação alternativa (supondo que os dados JSON estejam em file.json
):
#!/bin/bash
jq -r '.[].regions[]|[.geo, .server]|@tsv' <file.json |
while IFS=$'\t' read geo server; do
geoid=${geo#*:}
geoid=${geoid//\"/}
some_function "$variable1" "$variable2" "$server" "$geo" "$geoid"
done
Para os dados fornecidos, a chamada jq
geraria a seguinte saída:
"CountryCode":"AA" 1.2.33.4
"ContinentCode":"BB" 1.2.3.4
"CountryCode":"AA" 4.5.6.7
"ContinentCode":"BB" 6.7.8.9
Este é um texto delimitado por tabulações que o loop do shell está lendo em geo
e server
.
O geoid
é simplesmente excluído de $geo
, primeiro excluindo o material antes do :
e, em seguida, removendo quaisquer aspas duplas do valor restante. Isso é feito usando duas substituições de variáveis (das quais a segunda precisa de um shell como bash
).
O some_function
é então chamado.
Para depurar seu problema de saída, informe-nos o que o some_function
faz.