【问题标题】:Escaping a symbol in jq expression in a shell script在 shell 脚本中转义 jq 表达式中的符号
【发布时间】:2018-03-01 11:10:45
【问题描述】:

我的 shell 中导出了两个变量 var1var2

var1=root 
var2=webserver

我想要一个 jq 查询,它可以用 JSON 文件中的给定值替换 JSON 键。类似的,

jq -r --arg var1 $var1 --arg var2 $var2 '(.[].appId=$var1-$var2)' service.json

var1 和 var2 不能相减的错误。但我希望将变量替换为$var1-$var2 作为字符串。

我尝试使用"-",但它给出了编译错误。

service.json 内容如下。

[ {
      "appId": "Eternal Flame",
      "age": 1000000,
      "secretIdentity": "Unknown",
      "powers": [
        "Immortality",
        "Heat Immunity",
        "Inferno",
        "Teleportation",
        "Interdimensional travel"
      ]
    } ]

appId 值应替换为“root-webserver”

【问题讨论】:

  • 有什么理由分开传递这两个值,而不是提前组合它们? jq -r --arg newId "$var1-$var2" '(.[].appID=$newID)' service.json?
  • 是的,没有具体原因。这个解决方案看起来很棒。

标签: linux shell jq


【解决方案1】:

使用- 尝试对项目进行算术减法。我建议使用String interpolation。它会自动将输入转换为字符串:

jq -r --arg var1 $var1 --arg var2 $var2 '(.[].appId="\($var1)-\($var2)")' service.json 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    相关资源
    最近更新 更多