나는 @Michel 제안을 정말로 좋아한다. 때로는 BASH를 사용하여 특정 서버에서 작업을 실행하기 위해 일부 변수 값을 추출 할 수도 있습니다. 따라서 원하는 변수를 알고 있습니다. 이 접근 방식을 사용하는 것은 변수 당 값을 설정하기 위해 jq를 여러 번 호출하거나 여러 변수가있는 read 문을 사용하여 일부 변수가 유효하고 비어있을 수있는 방법입니다.
리드 값 시프트 오류 .svID [] .ID 경우 = ""(로 이어질 것입니다 내 이전 방식 SV 얻을 것이다 slotID의 값
-rd '\n' getInfo sv slotID <<< $(jq -r '(.infoCMD // "no info"), (.svID[].ID // "none"), (._id // "eeeeee")' <<< $data)
curl을 사용하여 객체를 다운로드 한 경우 데이터 배열에서 데이터를 추출 할 때 일부 변수의 이름을 알기 쉬운 이름으로 바꾸는 방법이 있습니다.
eval과 필터를 사용하면 한 줄로 문제를 해결하고 원하는 이름으로 변수를 생성합니다
eval "$(jq -r '.[0] | {varNameExactasJson, renamedVar1: .var1toBeRenamed, varfromArray: .array[0].var, varValueFilter: (.array[0].textVar|ascii_downcase)} | to_entries | .[] | .key + "=\"" + (.value | tostring) + "\""' <<< /path/to/file/with/object )"
이 경우 장점은 첫 번째 단계에서 원하는 모든 변수를 필터링하고 이름을 바꾸고 형식을 지정한다는 사실입니다. 거기에. [0] | GET을 사용하여 RESTFULL API 서버에서 소스 인 경우 응답 데이터는 다음과 같습니다.
[{"varNameExactasJson":"this value", "var1toBeRenamed: 1500, ....}]
데이터가 배열이 아닌 경우, 즉 다음과 같은 객체입니다.
{"varNameExactasJson":"this value", "var1toBeRenamed: 1500, ....}
초기 색인을 제거하십시오.
eval "$(jq -r '{varNameExactasJson, renamedVar1: .var1toBeRenamed, varfromArray: .array[0].var, varValueFilter: (.array[0].textVar|ascii_downcase)} | to_entries | .[] | .key + "=\"" + (.value | tostring) + "\""' <<< /path/to/file/with/object )"
이것은 오래된 질문이지만 찾기가 어려워서 나눔을 느꼈습니다.
declare -- “$key=$value”
와이$AUTHOR
배열 없이는 원래 같이 등 작업.PATH
이 버전보다 변경 이나 무언가가 여전히 덜 가능 하지만 여전히 eval보다 안전 합니다.