jq 如何将明文替换为文本变量

jq 如何将明文替换为文本变量

当我使用命令时:

jq -r '.balances[] | select(.asset=="BTC").free' wallet.json

结果:“4723846.89208129”

当我使用命令时:

coin2=BTC    
jq -r '.balances[] | select(.asset=="$coin2").free' wallet.json

结果:无

如何修复此错误?请帮帮我!

wallet.json 在这里:

{
  "makerCommission": 15,
  "takerCommission": 15,
  "buyerCommission": 0,
  "sellerCommission": 0,
  "canTrade": true,
  "canWithdraw": true,
  "canDeposit": true,
  "updateTime": 123456789,
  "accountType": "SPOT",
  "balances": [
    {
      "asset": "BTC",
      "free": "4723846.89208129",
      "locked": "0.00000000"
    },
    {
      "asset": "LTC",
      "free": "4763368.68006011",
      "locked": "0.00000000"
    }
  ],
  "permissions": [
    "SPOT"
  ]
}

答案1

  • 第一的,首先将该变量值传递给jqwith --arg coin2 "$coin2",如下所示:

    jq -r --arg coin2 "$coin2" '.balances[] | select(.asset==$coin2).free' wallet.json
    
  • 第二,不要在命令字符串$coin2中引用传递的变量,否则它将被逐字读取为固定字符串,而不是扩展为其值。jq' ... '

man jq

--参数名称值:

此选项将值作为预定义变量传递给 jq 程序。如果您使用 --arg foo bar 运行 jq,则 $foo 在程序中可用并且具有值“bar”。请注意,该值将被视为字符串,因此 --arg foo 123 会将 $foo 绑定到“123”。

相关内容