Как получить отформатированный текст, как при прямой передаче строки?

Как получить отформатированный текст, как при прямой передаче строки?

прямая передача строки с помощью $toecho

$ echo $'#include <iostream>\nint main() {\n  std::cout << \"Hello World!\" << std::endl;\n}'

расширяет встроенные управляющие последовательности ANSI

#include <iostream>
int main() {
  std::cout << "Hello World!" << std::endl;
}

Я присвоил строку переменной

codeStr='#include <iostream>\nint main() {\n  std::cout << \"Hello World!\" << std::endl;\n}'

и затем вывести переменную

echo $codeStr

Я получил необработанную строку, а не форматированный текст.

Как получить отформатированный текст, как при прямой передаче строки?

решение1

Использовать-eпереключить наenable interpretation of backslash escapes.

$ codeStr='#include <iostream>\nint main() {\n  std::cout << \"Hello World!\" << std::endl;\n}'
$ echo -e $codeStr 
#include <iostream>
int main() {
 std::cout << \"Hello World!\" << std::endl;
}

Обращение к комментарию @steeldriver printfтакже работает (и последовательность интерпретируется правильно).

$ codeStr='#include <iostream>\nint main() {\n  std::cout << \"Hello World!\" << std::endl;\n}'
$ printf "$codeStr"
#include <iostream>
int main() {
  std::cout << "Hello World!" << std::endl;
}

Связанный контент