“ ”를 포함하는 문자열에 변수를 삽입하는 방법은 무엇입니까?

변수를 삽입하여 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> 

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다