2016-05-13 80 views
1

我有以下命令的Makefile:回聲無法正常打印

$ echo \\newcommand{\\coverheight}{11.0in} > tmp 
$ cat tmp 
echo \\newcommand{\\coverheight}{11.0in} > tmp 

但是當我make文件使用相同echo命令,它沒有正確寫入文件。

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

運行'化妝」之後,輸出的是:

$ cat tmp 

ewcommand{ 

如何編寫正確使用Makefile使用echo文件?

回答

0

make只是發送一個配方(除了分割長線)到你的shell並不解釋它。所以這是你的解釋。

所以你的shell運行這個命令echoprintf命令。像bash或zsh這樣的shell使用echo和printf的內置命令(如果你不明確地說使用/bin/echo命令)。

shell之間的內置命令的行爲是有區別的。更重要的是,您可以使用一個shell來運行交互命令,並且make使用不同的shell(默認爲/ bin/sh)來處理收件人。

這是一個shell之間區別的例子。當我在echo \\newcommand運行bash我得到:

$ echo \\newcommand 
\newcommand 

當我在zsh運行echo \\newcommand我得到:

$ echo \\newcommand 

ewcommand 

我懷疑你,因爲它不同的結果。實際上printf '\\newcommand{\\coverheight}{11.0in}'必須更正確,因爲它使用強引號。

反正一個在生成文件打印的方式似乎是通過外部命令/斌/回聲:

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

或者使用你已經做了強有力的報價:

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