我有一个makefile,它将一些打字稿编译成JavaScript,并在其顶部添加“#!/ usr / bin / env node”行。 我做最后一件事的方式,atm,是用这一行
echo "#!/usr/bin/env node\n$$(cat javascriptFile)" > javascriptFile;\
但我注意到,在JavaScript中有\ n,\ t或类似的地方,它会被转换为换行符或制表符。
这种情况有些问题。假设我有一个文字字符串“这是一个\ n字符串”。 它最终成为
“这是一个 字符串“
这是无效的JavaScript。
我正在寻找的是在执行$$(cat文件)时保留\ n和\ t的方法;
答案 0 :(得分:2)
这与make无关;如果你在shell提示符中运行该命令,则会发生同样的事情。
问题是shell正在获取cat的输出并将其传递给echo。 Echo会自动转换所有这些字符,这就是它们被转换的原因(参见echo的手册页)。
此外,您无法捕获文件并将其重定向到同一文件!
使用echo打印除了最简单的文本之外的任何内容都是一个非常糟糕的主意。你应该像这样重写你的食谱:
( echo '#!/usr/bin/env node' ; cat javascriptFile ) > newJavascriptFile
mv newJavaScriptFile javascriptFile