¿Cómo obtengo el texto formateado como al pasar directamente una cadena?

¿Cómo obtengo el texto formateado como al pasar directamente una cadena?

pasar directamente una cuerda con $toecho

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

expande las secuencias de escape ANSI incrustadas

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

Asigné la cadena a una variable.

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

y luego repetir la variable

echo $codeStr

Obtuve la cadena sin formato en lugar de un texto formateado.

¿Cómo obtengo el texto formateado como al pasar directamente una cadena?

Respuesta1

Usar-ecambiar aenable 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;
}

Abordar el comentario de @steeldriver printftambién funciona (e interpreta la secuencia correctamente).

$ 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;
}

información relacionada