
나는 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를 먼저 끝에 놓고 이를 키로 사용합니다.