如何在Makefile循环中自动排除变量number=$(shell seq 1 50)的最后一个元素?
解决Makefile中序列排除最后一个元素的问题
以下是几种自动化处理方案,无需手动修改序列边界:
方案1:直接生成截断后的序列(最简便,适用于连续整数序列)
如果你的序列是从1到N的连续整数,直接定义上限变量,生成到N-1即可:
UPPER = 50 number = $(shell seq 1 $$((UPPER - 1)))
后续只需修改UPPER的值,number会自动排除最后一个元素。
方案2:通过shell命令移除最后一个元素(通用场景)
如果你的序列是任意形式(比如非连续、起始值不为1),可以先生成完整序列,再用head -n -1移除最后一行(seq默认每行输出一个元素):
number = $(shell seq 1 50 | head -n -1)
如果需要将结果转为空格分隔的单行格式,可加上tr命令:
number = $(shell seq 1 50 | head -n -1 | tr '\n' ' ')
注:若使用BSD系统(如macOS),head -n -1不生效,可改用计算总行数的方式:
number = $(shell seq 1 50 | head -n $$(($$(seq 1 50 | wc -l) - 1)))
方案3:用awk处理序列
另一种通用方法是借助awk过滤掉最后一行:
number = $(shell seq 1 50 | awk 'NR != NR_end {print} END {NR_end=NR}')
内容的提问来源于stack exchange,提问作者fantasmedro
相关产品推荐
相关产品推荐

