Json
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"} }
如何使用多個參數更新對象
您必須使用
[]
索引來使用變數(或任何非文字)作為鍵:jq --arg ssid abc --arg pass 123 '.connections[$ssid] = $pass' < file.json { "connections": { "abc": "123" } }
這里以 的值作為鍵
[$ssid]
索引。錯誤出現在“ ”處,這是一個語法錯誤,而不是與多個變數有關。.connections``$ssid``.$
變數不會像在 shell 腳本中那樣直接替換為字元串,而是必須在表達式上下文中使用的實際命名詞法綁定。索引可能是一個更複雜的表達式:
.connections[$ssid + "X"] = $pass
首先將 X 放在末尾並將其用作鍵。