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.$

변하기 쉬운쉘 스크립트에서와 같이 문자열을 직접 대체할 수는 없지만 표현식의 컨텍스트에서 사용해야 하는 실제 명명된 어휘 바인딩이 있습니다. 인덱스는 더 복잡한 표현식일 수 있습니다. .connections[$ssid + "X"] = $pass먼저 끝에 X를 넣고 이를 키로 사용합니다.

관련 정보