Você pode incorporar variáveis apenas em strings com aspas duplas.
Uma maneira fácil e segura de fazer isso funcionar é separar a sequência de aspas simples assim:
xml='<?xml version="1.0" encoding="iso-8859-1"?><tag1>'"$str1"'</tag1><tag2>'"$str2"'</tag2>'
Observe que, após a quebra da string entre aspas simples, coloquei as variáveis entre aspas duplas. Isto é para tornar seguro ter caracteres especiais dentro das variáveis.
Já que você pediu outra maneira, aqui está uma alternativa inferior usando printf
:
xml=$(printf '<?xml version="1.0" encoding="iso-8859-1"?><tag1>%s</tag1><tag2>%s</tag2>' "$str1" "$str2")
Isso é inferior porque usa um sub-shell para obter o mesmo efeito, que é um processo extra desnecessário.
Como @steeldriver escreveu em um comentário, nas versões modernas do bash, você pode escrever assim para evitar o sub-shell:
printf -v xml ' ... ' "$str1" "$str2"
Como printf
é um shell embutido, essa alternativa provavelmente está em parte com minha primeira sugestão no topo.