![如何像直接传递字符串一样获取格式化的文本?](https://linux22.com/image/1071654/%E5%A6%82%E4%BD%95%E5%83%8F%E7%9B%B4%E6%8E%A5%E4%BC%A0%E9%80%92%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%80%E6%A0%B7%E8%8E%B7%E5%8F%96%E6%A0%BC%E5%BC%8F%E5%8C%96%E7%9A%84%E6%96%87%E6%9C%AC%EF%BC%9F.png)
$
直接传递字符串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;
}