如何在Makefile中转义特殊字符(如\ n)

时间:2014-04-14 19:37:29

标签: bash makefile

我有一个makefile,它将一些打字稿编译成JavaScript,并在其顶部添加“#!/ usr / bin / env node”行。 我做最后一件事的方式,atm,是用这一行

 echo "#!/usr/bin/env node\n$$(cat javascriptFile)" > javascriptFile;\

但我注意到,在JavaScript中有\ n,\ t或类似的地方,它会被转换为换行符或制表符。

这种情况有些问题。假设我有一个文字字符串“这是一个\ n字符串”。 它最终成为

“这是一个 字符串“

这是无效的JavaScript。

我正在寻找的是在执行$$(cat文件)时保留\ n和\ t的方法;

1 个答案:

答案 0 :(得分:2)

这与make无关;如果你在shell提示符中运行该命令,则会发生同样的事情。

问题是shell正在获取cat的输出并将其传递给echo。 Echo会自动转换所有这些字符,这就是它们被转换的原因(参见echo的手册页)。

此外,您无法捕获文件并将其重定向到同一文件!

使用echo打印除了最简单的文本之外的任何内容都是一个非常糟糕的主意。你应该像这样重写你的食谱:

( echo '#!/usr/bin/env node' ; cat javascriptFile ) > newJavascriptFile
mv newJavaScriptFile javascriptFile