Json

jq 使用多個 –arg 添加或更新一個值

  • November 22, 2017

我有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 放在末尾並將其用作鍵。

引用自:https://unix.stackexchange.com/questions/406387