내 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를 넣고 이를 키로 사용합니다.