Eu quero construir uma seqüência de caracteres xml inserindo variáveis:
str1="Hello"
str2="world"
xml='<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>'
echo $xml
O resultado deve ser
<?xml version="1.0" encoding="iso-8859-1"?><tag1>Hello</tag1><tag2>world</tag2>
Mas o que eu recebo é:
<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>
Eu também tentei
xml="<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>"
Mas isso remove as aspas duplas internas e fornece:
<?xml version=1.0 encoding=iso-8859-1?><tag1>hello</tag1><tag2>world</tag2>
Respostas:
Você pode incorporar variáveis apenas em cadeias de caracteres entre aspas duplas.
Uma maneira fácil e segura de fazer esse trabalho é romper a cadeia de citação única assim:
Observe que, depois de quebrar a string de aspas simples, coloquei as variáveis entre aspas duplas. Isso é para tornar seguro ter caracteres especiais dentro das variáveis.
Como você pediu outra maneira, aqui está uma alternativa inferior usando
printf
:Isso é inferior porque usa uma subcasca para obter o mesmo efeito, que é um processo extra desnecessário.
Como o @steeldriver escreveu em um comentário, nas versões modernas do bash, você pode escrever assim para evitar o sub-shell:
Como
printf
é um shell embutido, essa alternativa provavelmente está em parte com a minha primeira sugestão no topo.fonte
A expansão variável não ocorre em cadeias de aspas simples.
Você pode usar aspas duplas para sua string e escapar das aspas duplas dentro de
\
. Como isso :A saída do resultado:
fonte