我正在编写一个 Makefile(在 Ubuntu 20.04 上,如果相关的话)并注意到echo
. 使用这个简单的 Makefile:
test.txt:
@echo -e 'hello\nworld'
@echo -e 'hello\nworld' > test.txt
当我运行时make
,我希望在 stdout 上看到与在 test.txt 中相同的内容,但实际上我没有。我在标准输出上得到了这个:
hello
world
但这在 test.txt 中:
-e hello
world
同时,如果我-e
从 Makefile 的两行中删除,我会在标准输出上得到这个:
hello\nworld
这在 test.txt 中:
hello
world
这让我想知道是否echo
检测到重定向并且行为不同,但是当我只是在 shell 中手动运行它时它不会/bin/echo -e 'hello\nworld' > test.txt
(这会产生hello
和world
在单独的行上,正如我通常所期望的那样)。@echo --version
我什至通过添加一行来确认 Makefile 正在使用 /bin/echo 而不是内置的 shell 。
这里发生了什么?