以下按预期工作:
branch := $(shell git rev-parse --abbrev-ref HEAD)
ifeq ($(branch), master)
ami_regions = us-west-2
endif
show_regions:
echo $(ami_regions)
如何将此ifeq
语句写成单行代码,如果条件通过则在其中设置变量,否则将变量设置为另一个值,或者只是将其保留为未设置状态?
答案 0 :(得分:2)
您可以在$(shell ...)
表达式中完成所有操作:
region := $(shell test `git rev-parse --abbrev-ref HEAD` = master && echo us-west-2)
all:
echo $(region)
答案 1 :(得分:2)
那应该是可能的。尝试chapter 8.4中的一种条件,并结合手册chapter 8.2中的字符串搜索:
mp.currentTimeProperty().addListener(new ChangeListener<>() {
@Override
public void changed(ObservableValue<? extends Duration> observable,
Duration oldTime, Duration newTime) {
durationSlider.setValue(newTime.toMillis() / mp.getTotalDuration().toMillis() * 100);
String formattedTime = ...; // your computations
displayCurrentTime.setText(formattedTime);
}
});
如果branch := $(shell git rev-parse --abbrev-ref HEAD)
ami_regions = $(if $(findstring master,$(branch)),us-west-2,)
show_regions:
echo $(ami_regions)
返回任何内容,则函数$if
将返回then分支的值。如果$findstring
包含字符串$findstring
,则master
将返回$(branch)
。不利之处在于,它还会匹配master
之类的东西。
要使此匹配完全掌握,您将不得不依靠bash:master-tests
。但是然后,您还必须注意$(shell if [ master = $(branch) ]; then echo "true"; fi )
不包含带有副作用的shell代码(通常不是)。
Renaud Pacalet和MadScientist在评论中对$(branch)
的使用进行了改进:使用$findstring
或$filter
。由于您搜索的字符串不是模式,因此也可以使用简单的$patsubst
而不是$subst
。
$patsubst
请注意,$(if $(patsubst master,,$(branch)),,us-west-2)
已移至else分支,因为如果替换成功,us-west-2
将找到的字符串替换为空字符串,从而导致错误条件。
$patsubst/subst
$(if $(filter master,$(branch)),us-west-2,)
从输入中返回与提供的模式匹配的单词。由于模式是一个单词,因此在这种情况下,它仅返回完全匹配项。
因此,基本上,两种选择都给出相似的结果。如果$filter
包含空格,则会产生差异:$branch
将返回删除的单词之间的空格,而$patsubst
仅返回匹配项。 Git不允许分支带有空格,这种情况不应该发生。
答案 2 :(得分:0)
一般的单线if
$(if $(strip $(subst $(a),,$(b))),false-command,true-command)
对于您的情况,您可以这样做:
$(if $(strip $(subst $(branch),,master)),,$(eval ami_regions = us-west-2))