【问题标题】:how to pass variables to jq如何将变量传递给jq
【发布时间】:2021-05-25 19:34:36
【问题描述】:

我在将变量传递给 jq 时遇到问题。这是示例文件:

[
  {
    "version": 24,
    "file": "branding/24"
  }
]

这是我的脚本:

jq --arg value "25" '. += [{"version": $value|tonumber, "file": "branding/$value|tonumber"}]' versions.json >tmp.json && mv tmp.json versions.json

结果是:

[
  {
    "version": 24,
    "file": "branding/24"
  },
  {
    "version": 25,
    "file": "branding/$value|tonumber"
  }
]

预期结果:

[
  {
    "version": 24,
    "file": "branding/24"
  },
  {
    "version": 25,
    "file": "branding/25"
  }
]

【问题讨论】:

  • @charlesduffy - 这实际上是关于字符串插值,而我相信您的超链接是关于传递一个值。
  • @peak,你是对的。我会尝试找到一个更好的,如果失败,我会重新打开。

标签: json bash variables interpolation jq


【解决方案1】:

您需要使用插值来评估过滤器。

{"version": $value|tonumber, "file": "branding/\($value|tonumber)"}

【讨论】:

  • 现在我的示例中有另一个问题 - 可以通过 jq-filter 的 version 字段检查 json 元素是否存在,如果不存在则追加?
  • @mpiatek, ...是的,这是可能的,但它应该是一个单独的问题(仅在检查其他已问/已回答的实例后提出)。在这一点上,您可能会发现 stackoverflow.com/a/54109775/14122 是有用的灵感。
  • @charlesduffy - 似乎 SO 赋予了我一些神奇的力量。出于可发现性的考虑,我认为只有在我们能找到一个包含这两个元素的问题得到很好回答的情况下才应该关闭它,因为我确信有.....
  • @peak,您的金徽章 dupehammer 附带的一项功能(恭喜,这是当之无愧的)是能够编辑分配给问题的重复项列表 - 它是一个 list,所以一个包含两个不同元素的问题可以同时附加两个重复项。最大值大约为 5,一般来说,该点太宽是合适的。
猜你喜欢
  • 2017-02-22
  • 1970-01-01
  • 2019-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-15
相关资源
最近更新 更多