![jq 使用多个 --arg 添加或更新值](https://linux22.com/image/122231/jq%20%E4%BD%BF%E7%94%A8%E5%A4%9A%E4%B8%AA%20--arg%20%E6%B7%BB%E5%8A%A0%E6%88%96%E6%9B%B4%E6%96%B0%E5%80%BC.png)
我的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 并将其用作键。