Я хочу построить строку 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>
Ответы:
Вы можете вставлять переменные только в строки в двойных кавычках.
Простой и безопасный способ сделать это - вырваться из строки в одинарных кавычках следующим образом:
Обратите внимание, что после разрыва строки в одинарных кавычках я заключил переменные в двойные кавычки. Это сделано для того, чтобы внутри переменных было безопасно иметь специальные символы.
Поскольку вы просили другой способ, вот плохая альтернатива, использующая
printf
:Это уступает, потому что он использует вспомогательную оболочку для достижения того же эффекта, который является ненужным дополнительным процессом.
Как писал @steeldriver в комментарии, в современных версиях bash вы можете написать так, чтобы избежать вложенной оболочки:
Поскольку
printf
это встроенная оболочка, эта альтернатива, вероятно, частично связана с моим первым предложением сверху.источник
Расширение переменной не происходит в одиночных кавычках.
Вы можете использовать двойные кавычки для вашей строки и экранировать двойные кавычки внутри с помощью
\
. Так :Результат вывода:
источник