작은따옴표 안에 삽입

작은따옴표 안에 삽입

나는 다음을 가지고 있습니다 :

COMMENT="A random comment"  
TEXT_JSON='{"person" : "Jim","comment" : "$COMMENT"}'    
echo "$TEXT_JSON" | jq .  

이 인쇄

{  
  "person": "Jim",  
  "comment": "$COMMENT"  
} 

이것은 내가 원하는 것이 아닙니다. 여기에 문자열을 어떻게 삽입하나요?

답변1

작은따옴표 안에는 삽입할 수 없습니다.

문자열을 큰따옴표로 묶은 다음 리터럴 큰따옴표를 이스케이프할 수 있습니다.

COMMENT="A random comment"
TEXT_JSON="{\"person\" : \"Jim\",\"comment\" : \"$COMMENT\"}"
echo $TEXT_JSON | jq .
{  
  "person": "Jim",  
  "comment": "A random comment"  
} 

또는 작은따옴표를 유지하여 아무것도 이스케이프할 필요가 없도록 할 수 있습니다. 단, 변수 앞에 작은따옴표를 끝내고 변수에 큰따옴표를 사용한 다음 문자열의 마지막 부분에 작은따옴표를 사용합니다.

TEXT_JSON='{"person" : "Jim","comment" : "'"$COMMENT"'"}'

답변2

셸 변수는 셸에서 작은따옴표로 묶인 문자열 내에서 확장되지 않습니다.

jq셸 변수의 데이터를 사용하여 JSON 문서를 생성하려면 또는 와 같은 JSON 인식 도구를 사용하세요 jo. 이렇게 하면 데이터가 문서에 포함될 수 있도록 적절하게 인코딩됩니다. JSON 문서에서 셸 변수를 확장하는 것은 원하는 작업이 아닙니다.

사용 jq:

comment='Some comment from "Random User"'
jq -n --arg comment "$comment" '{ "person": "Jim", "comment": $comment }'    

사용 jo:

comment='Some comment from "Random User"'
jo person=Jim comment="$comment"

둘 다 다음과 같이 표현될 수 있는 동등한 JSON을 생성합니다.

{
  "person": "Jim",
  "comment": "Some comment from \"Random User\""
}

큰따옴표가 자동으로 처리되는 방식에 유의하세요.

관련 정보