0

In bash script:

for (( pageNumber=$page; pageNumber<=$countPages; pageNumber++ ))         
do
    read -r currentIssuesArr < <(echo $(curl -s -XGET $BASE_URL/issues/search\?componentKeys\=$PROJECT_KEY\&p\=$pageNumber\&ps\=$PAGE_SIZE | jq -r '.issues[]'))
    jq '.issues[.issues| length] |= . + {"aaaaaaaaaaaa": "2010-01-07T19:55:99.999Z"}' $FILE_REPORT_RESULT >test.json
done

This work fine. And add json to last array's item. Nice.

But now I want do the same but via variable currentIssuesArr

Like this:

for (( pageNumber=$page; pageNumber<=$countPages; pageNumber++ ))         
do
    read -r currentIssuesArr < <(echo $(curl -s -XGET $BASE_URL/issues/search\?componentKeys\=$PROJECT_KEY\&p\=$pageNumber\&ps\=$PAGE_SIZE | jq -r '.issues[]'))
    jq '.issues[.issues| length] |= . + $currentIssuesArr' $FILE_REPORT_RESULT >test.json
done

But now I get error:

jq: error: $currentIssuesArr is not defined at <top-level>, line 1:
.issues[.issues| length] |= . + $currentIssuesArr                                
jq: 1 compile error
jq: error: $currentIssuesArr is not defined at <top-level>, line 1:
Alexei
  • 14,350
  • 37
  • 121
  • 240
  • 4
    Variables are not expanded inside single quotes in `bash`. Try using double quotes and escape whatever needs to be escaped. – Poshi Nov 15 '21 at 13:45
  • 1
    Don't inject variables from outside into the code! Rather import their values using the `--arg` or `--argjson` options. – pmf Nov 15 '21 at 14:26
  • Unrelated: did you mean `.issues |= . + $currentIssuesArr` to just append the issues? – Botje Nov 15 '21 at 15:45
  • ... or just `.issues += $currentIssuesArr` – peak Nov 15 '21 at 18:31

1 Answers1

0

You set the shell's currentIssuesArr but not jq's. Use:

jq --argjson currentIssuesArr "$currentIssuesArr" '...'

You could also export currentIssuesArr and use env.currentIssuesArr in jq.

If we cleanup the program, we get

jq --argjson currentIssuesArr "$currentIssuesArr" '.issues += [ $currentIssuesArr ]'

(You call the variable an "issues array", but your working code shows an object. If it is an array, remove the square brackets.)

ikegami
  • 367,544
  • 15
  • 269
  • 518
  • This work : jq -r ".issues[.issues| length] |= . + $currentIssuesArr" – Alexei Nov 16 '21 at 07:42
  • @a_subscriber, No. Do not generate jq code from the shell. (Also, the `-r` makes no sense, and the program is overly complicated. See update) – ikegami Nov 16 '21 at 13:39