如何像直接传递字符串一样获取格式化的文本?

如何像直接传递字符串一样获取格式化的文本?

$直接传递字符串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

我得到的是原始字符串而不是格式化的文本。

如何像直接传递字符串一样获取格式化的文本?

答案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;
}

相关内容