나는 다음을 가지고 있습니다 :
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\""
}
큰따옴표가 자동으로 처리되는 방식에 유의하세요.