Home > front end >  jq not writing value of variable but the actual text of the variable name
jq not writing value of variable but the actual text of the variable name

Time:11-12

I'm scripting in bash to edit a json template to replace some field values with arguments to my script, and trying to use jq to do the editing. My code is not replacing the --arg with the value of the argument, but the literal text of the argument name.

My template contains:

{
"name":""
}

My jq code:

jq --arg ad "192.168.5.5" -r '.name = "Addr $ad"' address.tmpl

This outputs:

{
    "name": "Addr $ad"
}

Or, if I remove the double-quotes

jq --arg ad "192.168.5.5" -r '.name = Addr $ad' address.tmpl

I get

jq: error: syntax error, unexpected '$', expecting $end (Unix shell quoting issues?) at <top-level>, line 1:
.name = Addr $ad
jq: 1 compile error

According to all that I have read, this should work. What am I doing wrong/how do I fix this????

OS = debian 10

CodePudding user response:

In the jq manual, search for "String interpolation"

jq --arg ad "192.168.5.5" -r '.name = "Addr \($ad)"'

CodePudding user response:

jq --arg ad 192.168.5.5 -r '.name = "Addr "   $ad' address.tmpl

$ad will be expanded by the shell if it is not not hard quoted. In jq, you can use string interpolation "Addr \($ad)", or concatenation (as above), which I find slightly more readable.

  • Related