jq 명령의 Unix 쉘 참조 문제 오류

jq 명령의 Unix 쉘 참조 문제 오류

jq -n --arg KEY 'no leading zero' --arg VAL '.13452' '.+={$KEY:$VAL}'출력을 생성하기 위해 bash 터미널에서 이 명령을 시도하고 있습니다 {"no leading zero":".13452"}.

하지만 다음과 같은 오류가 발생합니다.

jq: error: syntax error, unexpected ':', expecting '}' (Unix shell quoting issues?) at <top-level>, line 1:
.+={$KEY:$VAL}        
jq: error: May need parentheses around object key expression at <top-level>, line 1:
.+={$KEY:$VAL}    
jq: 2 compile errors

{"no leading zero":".13452"}매개변수를 사용하여 출력을 얻도록 명령을 수정하려면 어떻게 해야 합니까 ?

감사해요.

답변1

당신은 그것을 사용할 수 있습니다문자열 보간:

jq -n --arg KEY 'no leading zero' --arg VAL '.13452' '{"\($KEY)":$VAL}'

생산하다

{
  "no leading zero": ".13452"
}

답변2

jq가장 일반적인 방법은 세 가지 방법 중 하나로 객체에 키와 해당 값을 추가하는 것입니다.

  1. ( )처럼 기존 객체에 키와 값이 있는 객체를 "추가" . += { key: value }하거나,
  2. 키를 생성하고 기존 객체( .key = value)에 직접 값을 할당하거나
  3. 변수를 사용할 때 현명하게 이름을 지정하면 간단히 ( )를 사용하고 추가 --arg할 수 있습니다 .$ARGS.named. += $ARGS.named

첫 번째 경우, 변수를 사용할 때 키는 평가할 표현식으로 처리됩니다. 즉, 키를 괄호로 묶어야 합니다(오류 메시지는 이 사실을 직접적으로 암시합니다).

. += { ($key): $value }

예를 들어:

jq -n --arg key 'no leading zero' --arg value '.13452' '{ ($key): $value }'

(추가할 개체가 없으므로 . +=필요하지 않습니다.)


두 번째 경우에는 다음 .[$key]구문을 사용해야 합니다.

.[$key] = $value

예를 들어:

jq -n --arg key 'no leading zero' --arg value '.13452' '.[$key] = $value'

세 번째 경우에는 다음을 사용하십시오.

. += $ARGS.named

예를 들어:

jq -n --arg 'no leading zero' '.13452' '$ARGS.named'

(추가할 개체가 없으므로 . +=필요하지 않습니다.)


을 사용할 수도 있습니다 jo. 이 경우 구문이 더 단순해지거나 적어도 명령이 더 짧아집니다.

jo -- -s 'no leading zero'=.13452

(이렇게 하면 -s숫자가 문자열로 해석됩니다.)

관련 정보