填充数字

问题描述:

在GNU让你有一个数字的列表:填充数字

NUMBERS = 8 9 10 

你怎么能垫他们前导零?

NUMBERS = 08 09 10 

看来,制作(至少GNU MAKE)不具备的功能与这种类型的数据的处理好。你可以去野生和使用shell(只在Unix系统中):

NUMBERS = 8 9 10 
NUMBERS2=$(foreach v,$(NUMBERS),$(shell printf '%02d' $(v))) 
all: 
    echo $(NUMBERS2) 

会打印:

08 09 10 

如果每个数字不是太大,可以按如下方式实现:

__seq = $(foreach i,$(seq1),$(addprefix $i,$1)) 
seq1 := 0 1 2 3 4 5 6 7 8 9 
seq2 := $(call __seq,$(seq1)) 
seq3 := $(call __seq,$(seq2)) 

# Args: 
# 1. Padding (1, 2, or 3) 
# 2. Numbers 
pad = $(strip \ 
    $(foreach n,$2, \ 
     $(if $(subst 0,,$n), \ 
      $(word $n,$(wordlist 2,$(words $(seq$1)),$(seq$1))), \ 
      $(firstword $(seq$1))))) 

NUMBERS := 8 9 10 

all: 
    echo $(call pad,2,$(NUMBERS))