我有一个变量number=$(shell seq 1 50)。我需要这个序列,但避免在一个特定的循环中的最后一个元素。我该怎么做呢?因为唯一的工作解决方案是手动引入它,但这不是我要找的。我尝试了几个选项,但似乎没有工作,我想有它自动化,而不是为情况下,limist在哪里被改变。
gev0vcfq1#
在GNU Make中,我们可以这样做:
butlast = $(filter-out $(lastword $(1)),$(1)) numbers=$(shell seq 1 10) $(info $$(numbers) == $(numbers)) $(info $$(call butlast,$$(numbers)) == $(call butlast,$(numbers))) .PHONY: all all: echo "hey"
字符串运行:
$ make $(numbers) == 1 2 3 4 5 6 7 8 9 10 $(call butlast,$(numbers)) == 1 2 3 4 5 6 7 8 9 echo "hey" hey
型
注意:butlast取决于列表中的项目是否唯一。所以它的名字是个谎言。它使用filter-out,它只是删除所有匹配的项。在上面的例子中,我们过滤掉了只出现一次的10。如果10出现在列表中的其他位置,这些也会消失,但seq的输出没有问题。
butlast
filter-out
10
seq
o2gm4chl2#
您可以先计算较短的列表,然后附加最后一个元素来计算完整的列表:
$ cat Makefile max := 10 short := $(shell seq 1 `expr $(max) - 1`) long := $(short) $(max) .PHONY: all all: $(info short = $(short)) $(info long = $(long)) $ make short = 1 2 3 4 5 6 7 8 9 long = 1 2 3 4 5 6 7 8 9 10
字符串
2条答案
按热度按时间gev0vcfq1#
在GNU Make中,我们可以这样做:
字符串
运行:
型
注意:
butlast
取决于列表中的项目是否唯一。所以它的名字是个谎言。它使用filter-out
,它只是删除所有匹配的项。在上面的例子中,我们过滤掉了只出现一次的10
。如果10
出现在列表中的其他位置,这些也会消失,但seq
的输出没有问题。o2gm4chl2#
您可以先计算较短的列表,然后附加最后一个元素来计算完整的列表:
字符串