以下工作按预期进行:
branch := $(shell git rev-parse --abbrev-ref HEAD)
ifeq ($(branch), master)
ami_regions = us-west-2
endif
show_regions:
echo $(ami_regions)
Run Code Online (Sandbox Code Playgroud)
这条语句如何ifeq写成一行语句,如果条件通过则设置变量,否则将变量设置为另一个值或简单地将其保留为未设置?
那应该是可能的。尝试将第 8.4 章中的一个条件与手册第 8.2 章中的字符串搜索结合起来:
branch := $(shell git rev-parse --abbrev-ref HEAD)
ami_regions = $(if $(findstring master,$(branch)),us-west-2,)
show_regions:
echo $(ami_regions)
Run Code Online (Sandbox Code Playgroud)
如果返回任何内容,该函数$if将从 then 分支返回值$findstring。如果包含字符串则$findstring返回。缺点是这也会匹配类似的东西。master$(branch)mastermaster-tests
为了使这个匹配完全掌握,你必须依赖 bash: $(shell if [ master = $(branch) ]; then echo "true"; fi )。但是您还必须注意$(branch)不要包含具有副作用的 shell 代码(通常不会)。
Renaud Pacalet 和 MadScientist 在评论中给出了对使用的改进$findstring:使用$filter或$patsubst。由于您正在搜索的字符串不是模式,因此也可以使用 simple$subst代替。$patsubst
$(if $(patsubst master,,$(branch)),,us-west-2)
Run Code Online (Sandbox Code Playgroud)
请注意,us-west-2已移至 else 分支,因为$patsubst/subst如果替换成功,则将找到的字符串替换为空字符串,从而导致错误条件。
$(if $(filter master,$(branch)),us-west-2,)
Run Code Online (Sandbox Code Playgroud)
$filter从输入中返回与提供的模式匹配的单词。由于模式是单个单词,因此在本例中它仅返回精确匹配。
所以基本上两种选择都会给出相似的结果。如果包含空格,则会出现差异 $branch:删除的单词之间的空格将由 返回$patsubst,而$filter仅返回匹配项。Git 不允许分支带有空格,这种情况不应该发生。
| 归档时间: |
|
| 查看次数: |
6049 次 |
| 最近记录: |