Echo没有解释换行符

时间:2017-03-08 20:06:48

标签: makefile escaping

我有一个makefile,其中一个动作要求我将一个字符串\noslide写入名为modeset.txt的文本文件中,所以我使用了#echo;#echo;#。虽然 -E 标志应该禁用反斜杠转义的解释 echo会将标志作为sting的一部分处理(参见下面的输出)。

以下是我的makefile中的精简片段:

.PHONY: target all

all: target

target:
    echo -E "\noslide" > modeset.txt
clean:
    rm -f modeset.txt

modeset.txt文件的内容显示echo将-E作为字符串的一部分。

-E 
oslide

但是在shell中,echo -e和echo -E按预期工作,那么makefile环境会导致什么呢?

操作系统:仅来自官方渠道的Vanilla Debian 8。

1 个答案:

答案 0 :(得分:1)

除了简单的文字之外,

echo不可移植。许多不同的版本存在不同的行为,即使在同一系统中,也可能取决于您使用的shell(即shell内置echo与系统的/bin/echo

如果您想要显示除简单文字后跟换行符以外的任何内容,则应使用printf而不是echo

target:
         printf '\\noslide\n' > modeset.txt