String 比较字符串时生成文件问题

String 比较字符串时生成文件问题,string,makefile,comparison,String,Makefile,Comparison,在我的makefile中,我需要检查文件是否以bash shebang开头 我通过这样做得到这个值 PROJECT_AUTOINSTALL_FIRST_LINE := $$(head -n 1 ./autoinstall_script.sh) 然后我将其与这个值进行比较: BASH_SHEBANG = \#!/bin/bash 然后我通过这样做来检查它们是否相等 ifneq ($(PROJECT_AUTOINSTALL_FIRST_LINE),$(BASH_SHEBANG)) @${

在我的makefile中,我需要检查文件是否以bash shebang开头

我通过这样做得到这个值

PROJECT_AUTOINSTALL_FIRST_LINE := $$(head -n 1 ./autoinstall_script.sh)
然后我将其与这个值进行比较:

BASH_SHEBANG = \#!/bin/bash
然后我通过这样做来检查它们是否相等

ifneq ($(PROJECT_AUTOINSTALL_FIRST_LINE),$(BASH_SHEBANG))
    @${ERROR_ECHO} "The FIRST line in project autoinstall file MUST be $(BASH_SHEBANG)."
endif
问题是,无论文件是否以shebang开头,该条件始终为真。 我制作了一个调试回音,以便以可视化的方式测试相等性,结果如下:

乍一看,他们似乎是平等的,但代码并不能说明这一点。你知道我做错了什么吗

谢谢。

什么

PROJECT_AUTOINSTALL_FIRST_LINE := $$(head -n 1 ./autoinstall_script.sh)
只需分配文本字符串
$(head-n1./autoinstall\u script.sh)
以使变量
成为项目\u autoinstall\u的第一行
。不是你想要的。请尝试以下操作:

PROJECT_AUTOINSTALL_FIRST_LINE := $(shell head -n 1 ./autoinstall_script.sh)

工作起来很有魅力…但我还不能理解这个问题。那么,为什么在产出方面它们看起来是相等的呢?非常感谢。因为当shell执行
echo$(head…
)时,它首先执行
head…
,并回显结果。请参阅shell手册的命令替换部分。如果要查看make变量的值,请不要使用配方。首选
info
make函数,并将其放在您的Makefile中:
$(info MYVAR=|$(MYVAR)|)
|
是可选的,它只是显示前导空格或尾随空格的一种方式)。