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"] = $passX를 먼저 끝에 놓고 이를 키로 사용합니다.

관련 정보