변수를 삽입하여 xml 문자열을 구성하고 싶습니다.
str1="Hello" str2="world" xml="<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>" echo $xml
결과
<?xml version="1.0" encoding="iso-8859-1"?><tag1>Hello</tag1><tag2>world</tag2>
하지만 내가 얻는 것은 다음과 같습니다.
<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>
또한 시도했습니다
xml="<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>"
하지만 내부 큰 따옴표를 제거하고 다음을 제공합니다.
<?xml version=1.0 encoding=iso-8859-1?><tag1>hello</tag1><tag2>world</tag2>
댓글
- XML 문서는 2 개의 최상위 태그를 가질 수 없습니다. 또한 ' 2016 년에는 iso-8859-1이 아닌 utf-8을 사용하는 것이 강력히 권장됩니다.
답변
큰 따옴표로 묶인 문자열에만 변수를 포함 할 수 있습니다.
이 작업을 수행하는 쉽고 안전한 방법은 다음과 같습니다. 작은 따옴표로 묶인 문자열을 다음과 같이 분리하려면 :
xml="<?xml version="1.0" encoding="iso-8859-1"?><tag1>""$str1""</tag1><tag2>""$str2""</tag2>"
작은 따옴표로 묶인 문자열을 분리 한 후 변수를 이중 인용 부호. 이는 변수 내에 특수 문자를 안전하게 넣을 수 있도록하기위한 것입니다.
다른 방법을 요청 했으므로 다음은 printf
를 사용한 열등한 대안입니다.
p>
xml=$(printf "<?xml version="1.0" encoding="iso-8859-1"?><tag1>%s</tag1><tag2>%s</tag2>" "$str1" "$str2")
이는 불필요한 추가 프로세스 인 동일한 효과를 얻기 위해 하위 셸을 사용하기 때문에 열등합니다.
As @steeldriver 가 주석에 작성했습니다. 최신 버전의 bash에서는 다음과 같이 작성하여 하위 셸을 피할 수 있습니다.
printf -v xml " ... " "$str1" "$str2"
printf
는 쉘 내장이므로이 대안은 아마도 맨 위에있는 첫 번째 제안과 함께 부분적으로있을 것입니다.
Answer
작은 따옴표 문자열에서는 변수 확장이 발생하지 않습니다.
문자열에 큰 따옴표를 사용하고 내부의 큰 따옴표를 이스케이프 할 수 있습니다. \
. 다음과 같이 :
xml="<?xml version=\"1.0\" encoding=\"iso-8859-1\"?><tag1>$str1</tag1><tag2>$str2</tag2>"
결과 출력 :
<?xml version="1.0" encoding="iso-8859-1"?><tag1>hello</tag1><tag2>world</tag2>