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

相關內容