
我的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 並將其用作鍵。