Bash 命令替换不';无法在makefile中使用echo
下面是一个在我的bash shell中运行良好的简单命令:Bash 命令替换不';无法在makefile中使用echo,bash,shell,makefile,scripting,gnu-make,Bash,Shell,Makefile,Scripting,Gnu Make,下面是一个在我的bash shell中运行良好的简单命令: echo "Created at: $(date)" >> README.md 它将于2018年1月24日星期三10:04:48标准时间创建的附加到README.md 但是,如果我在makefile中包含相同的命令,则行为不同 生成文件: README.md: echo "Created at: $(date)" >> README.md 运行make README.md会将命令替换视为空字符串,如下
echo "Created at: $(date)" >> README.md
它将于2018年1月24日星期三10:04:48标准时间创建的附加到README.md
但是,如果我在makefile中包含相同的命令,则行为不同
生成文件:
README.md:
echo "Created at: $(date)" >> README.md
运行make README.md
会将命令替换视为空字符串,如下所示:
echo "Created at: " >> README.md
添加到README.md的内容创建于:
如何在makefile中使用echo正确输出命令替换?如果希望Make调用的shell接收以下内容:
echo "Created at: $(date)" >> README.md
然后,您需要使用规则中的另一个$
来转义$
:
README.md:
echo "Created at: $$(date)" >> README.md
date = $$(date)
README.md:
echo "Created at: $(date)" >> README.md
否则,Make的变量date
将展开,这将是echo
作为参数获取的内容,因为makefile中的$(date)
将展开变量date
出局 请注意,如果Make的变量
date
定义如下,则它将按预期工作,而无需在规则中引用$
:
README.md:
echo "Created at: $$(date)" >> README.md
date = $$(date)
README.md:
echo "Created at: $(date)" >> README.md
原因是变量
date
(在规则的配方中使用)将通过Make to$(date)
展开,并将其传递给shell。此问题肯定不是链接答案的重复。我确信这个问题有很多很多答案,但那个答案不是。我添加了一个与这个问题相关的重复链接。