jq 使用多个 --arg 添加或更新值

jq 使用多个 --arg 添加或更新值

我的file.json结构如下:

{
  "connections": {}
}

我想用变量$1和更新连接对象$2。我想:

jq --arg ssid "$1" --arg pass "$2" '.connections.$ssid = "$pass"' file.json > tmp.json && mv tmp.json file.json

但我回来了jq: error: syntax error, unexpected '$', expecting FORMAT or QQSTRING_START (Unix shell quoting issues?) at <top-level>, line 1: .connections.$ssid = "$pass"

我期望script.sh value key生产:

{
  "connections": {key:"value"}
}

如何使用多个参数更新对象

答案1

你必须使用[]索引使用变量(或任何非文字)作为键:

jq --arg ssid abc --arg pass 123 '.connections[$ssid] = $pass' < file.json
{
  "connections": {
    "abc": "123"
  }
}

这里以 的值作为键[$ssid]进行索引。错误出现在“ ”处,这是一个语法错误,而不是与多个变量有关。.connections$ssid.$

变量不会像在 shell 脚本中那样直接替换为字符串,而是必须在表达式上下文中使用的实际命名词法绑定。索引可以是一个更复杂的表达式:.connections[$ssid + "X"] = $pass首先在末尾放置一个 X 并将其用作键。

相关内容