bash – Makefile`echo -n’不工作

前端之家收集整理的这篇文章主要介绍了bash – Makefile`echo -n’不工作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图让我的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?

猜你在找的Bash相关文章