Makefile:echo不正确地打印

4
我有以下命令。
$ echo \\newcommand{\\coverheight}{11.0in} > tmp
$ cat tmp
echo \\newcommand{\\coverheight}{11.0in} > tmp

但是当我在Makefile中使用相同的echo命令时,它没有正确地写入文件。

# Makefile
all:
       printf '\\newcommand{\\coverheight}{11.0in}' > tmp

运行`make'后,输出结果为:

$ cat tmp 

ewcommand{

如何使用 Makefileecho 正确地写入文件?

1个回答

3
make只是将一个配方(除了分割长行之外)发送到您的shell,而不解释它。因此,是您的shell进行解释。
因此,您的shell运行这个echoprintf命令。像bash或zsh这样的shell使用内置命令来执行echo和printf(如果您没有显式地指定使用/bin/echo命令)。
并且builtin命令在不同的shell之间有不同的行为差异。更重要的是,您可以使用一种shell来运行交互式命令,并且make使用不同的shell(默认为/bin/sh)来处理配方。
以下是不同shell之间的差异示例。当我在bash中运行echo \\newcommand时,我得到的是:
$ echo \\newcommand
\newcommand

当我在zsh中运行echo \\newcommand时,会得到以下结果:

$ echo \\newcommand

ewcommand

我怀疑你得到不同的结果是因为这个原因。实际上,printf '\\newcommand{\\coverheight}{11.0in}' 更正确,因为它使用了强引用。
无论如何,在makefile中打印的一种方法似乎是使用外部命令/bin/echo:
all:
       command echo '\\newcommand{\\coverheight}{11.0in}' > tmp

或者像您已经做的那样使用强引用:

all:
       printf '\\newcommand{\\coverheight}{11.0in}' > tmp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接