一些关于报价的东西令人困惑make。您的代码对我来说表现相同,但以下内容按预期工作:
help:
@echo -n Shouldn\'t print a newline
硬编码可执行文件的路径也可以:
help:
@/bin/echo -n "Shouldn't print a newline"
的 Mac OS X 手册页echo在讨论 shell 内置echos 的存在时提到echoofsh(1)不支持该-n选项,但这无法解释(无论如何对我来说)我的第一个替代方案为何有效。
make默认情况下用于sh执行命令的确认。制作手册 5.3.2 选择 Shell指定此 hehavrior:
用作 shell 的程序取自变量 SHELL。如果您的 makefile 中未设置此变量,则程序 /bin/sh 将用作 shell。传递给 shell 的参数取自变量 .SHELLFLAGS。.SHELLFLAGS 的默认值通常是 -c,或者在符合 POSIX 的模式下是 -ec。
在
SHELL = bash
help:
@echo -n "Shouldn't print a newline"
@echo -n Shouldn\'t print a newline
两个 echo 语句的行为相同(不打印换行符)。因此,如果没有该变量,我们就bash假装是sh,但对这两行的评估方式不同。问题一:为什么?问题2:第二行是本机bash回声还是/bin/echo,而不是模拟sh echo?