Quiero construir una cadena xml insertando variables:
str1="Hello"
str2="world"
xml='<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>'
echo $xml
El resultado debería ser
<?xml version="1.0" encoding="iso-8859-1"?><tag1>Hello</tag1><tag2>world</tag2>
Pero lo que obtengo es:
<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>
También intenté
xml="<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>"
Pero eso elimina las comillas dobles internas y da:
<?xml version=1.0 encoding=iso-8859-1?><tag1>hello</tag1><tag2>world</tag2>
Respuestas:
Puede incrustar variables solo en cadenas entre comillas dobles.
Una manera fácil y segura de hacer que esto funcione es salir de la cadena entre comillas simples de esta manera:
Tenga en cuenta que después de salir de la cadena entre comillas simples, encerré las variables entre comillas dobles. Esto es para que sea seguro tener caracteres especiales dentro de las variables.
Como solicitó otra forma, aquí hay una alternativa inferior usando
printf
:Esto es inferior porque utiliza un sub-shell para lograr el mismo efecto, que es un proceso adicional innecesario.
Como @steeldriver escribió en un comentario, en las versiones modernas de bash, puede escribir así para evitar el sub-shell:
Dado que
printf
es un shell incorporado, esta alternativa es probablemente en parte con mi primera sugerencia en la parte superior.fuente
La expansión variable no ocurre en cadenas de comillas simples.
Puede usar comillas dobles para su cadena y escapar de las comillas dobles en el interior con
\
. Me gusta esto :El resultado resultante:
fuente