Bash 스크립트를 사용하여 XML 파일 만들기

Bash 스크립트를 사용하여 XML 파일 만들기

(dom 대신) bash 스크립트를 사용하여 간단한 xml 파일을 만들고 싶습니다.

하지만 행에 값을 설정하면 에코val 대신 $lorem 단어를 인쇄하세요.

로렘=ㅋㅋㅋ

echo '<root><foo a="b">$lorem</foo><bar value="ipsum" /></root>' >> $MY_XML

나도 노력해

echo '<root><foo a="b">\$lorem</foo><bar value="ipsum" /></root>' >> $MY_XML

echo '<root><foo a="b">"$lorem"</foo><bar value="ipsum" /></root>' >> $MY_XML

echo '<root><foo a="b">\"$lorem\"</foo><bar value="ipsum" /></root>' >> $MY_XML

그러나 그들 모두는 값이 아닌 행을 정확하게 인쇄합니다.

val $lorem을 인쇄하는 방법을 제안해 주세요. 다음 예와 같이

 <root><foo a="b">LOL</foo><bar value="ipsum" /></root>

답변1

cat과 함께 인라인 문서 사용하기

cat >destfile <<EOF
<your ZML here...where $vas expand happly>
but the rest remain as is
EOF

나는 이것을 많은 스크립트에서 사용합니다. 또한 고려해 보시기 바랍니다envsubst 명령은 변수를 제한합니다.인라인 문서에서 사용할 수 있습니다.

답변2

다음과 같이 줄을 인쇄하십시오.

echo '<root><foo a="b">'"$lorem"'</foo><bar value="ipsum" /></root>' >> "$MY_XML"

작은따옴표가 쉘 인터프리터가 내부의 환경 변수를 대체하는 것을 방지하기 때문에 이것이 필요합니다.

답변3

실망스럽게도 생략한 조합 중 하나가 작동할 수 있습니다.

echo "<root><foo a=\"b\">$lorem</foo><bar value=\"ipsum\" /></root>" >> $MY_XML

작은따옴표를 사용하면 모든 내용이 입력한 대로 정확하게 표시됩니다. 탈출이 \작동하지 않습니다. 큰따옴표는 문자열을 평가합니다. 큰따옴표 내에서 \특정 문자(큰따옴표 문자 자체 포함)를 이스케이프하는 데 사용할 수 있습니다 .

다양한 방식으로 참조되는 문자열 부분을 결합할 수도 있습니다. 여기서는 $lorem여전히 큰따옴표로 묶여 있지만 문자열의 나머지 부분은 작은따옴표로 묶여 있습니다.

echo '<root><foo a="b">'"$lorem"'</foo><bar value="ipsum" /></root>' >> $MY_XML

답변4

XML 템플릿에 값을 삽입할 때 특수 문자를 이스케이프 처리해야 합니다.

escape() {
    local val
    val=$1
    val=${val//&/&amp;}
    val=${val//</&lt;}
    val=${val//>/&gt;}
    val=${val//\'/&apos;}
    val=${val//\"/&quot;}
    printf %s "$val"
}

lorem="\"Foo\" & 'Bar' & <Baz>"

cat << EOF
<root><foo a="b">$(escape "$lorem")</foo><bar value="ipsum" /></root>
EOF

관련 정보