Показать статистику
0 голосов
от (600 баллов)

прямая передача строки с $ to echo

$ 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

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

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

121 просмотров 1 ответов

1 Ответ

0 голосов
от (26.4тыс. баллов)

Используйте -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;
}

Также обратите внимание, что, хотя это $'...'рассматривается \"как escape-последовательность, встроенная оболочка bash echo -e не работает (следовательно, вывод здесь фактически отличается от OP). 

...