我试图让我的Makefile回显文本没有尾随的新行,但我无法。我正在体验OS X上的行为(在Linux上,一切都按预期工作)。
Makefile
a: @echo -n "hello" b: @echo -n hello c: @/bin/echo -n "hello"
输出:
$make a -n hello $make b hello$make c hello$
换句话说,make a被打破了。究竟发生了什么?是使用内置的回声?显然,双引号的存在会改变行为,但为什么?
更新
由@chepner发现,使用makefile中的/ bin / echo的完整路径可以正确地了解-n标志。
有关报价的事情混淆了。您的代码对我来说是一样的,但以下工作原理如下:
help: @echo -n Shouldn\'t print a newline
硬编码可执行文件的路径也起作用:
help: @/bin/echo -n "Shouldn't print a newline"
在讨论shell内置回声的存在的Mac OS X手册页中,提到sh(1)的回声不支持-n选项,但是无法解释(对我来说)为什么我的第一个替代作品。
确认使用sh默认执行命令。在
SHELL = bash help: @echo -n "Shouldn't print a newline" @echo -n Shouldn\'t print a newline
两个回声语句的行为相同(不打印换行符)。所以没有这个变量,我们有谣言假装是sh,但评估两行不同。问题1:为什么?问题2:是第二行本机的bash echo还是/ bin / echo,而不是模拟的sh echo?