8

有没有比获取 GNUmake变量的第一个字符更好的方法

FIRST=$(shell echo $(VARIABLE) | head -c 1)

(这不仅笨拙,而且还调用了外壳)?

4

3 回答 3

8

这非常可怕,但至少它不会调用shell

$(eval REMAINDER := $$$(VAR))          # variable minus the first char
FIRST := $(subst $(REMAINDER),,$(VAR)) # variable minus that
于 2012-10-09T22:29:25.313 回答
3

GNU Make 标准库提供了一个substr函数

子串

Arguments: 1: A string
           2: Start offset (first character is 1)
           3: Ending offset (inclusive)
Returns:   Returns a substring

我没有测试过,但$(call substr,$(VARIABLE),1,1)应该可以

于 2012-10-18T15:53:28.620 回答
0

由于我在自己的搜索中遇到了这个并且没有找到我正在寻找的内容,因此我最终使用它来解析可以应用于任何已知字符集的十六进制数字

letters := 0 1 2 3 4 5 6 7 8 9 a b c d e f
nextletter = $(strip $(foreach v,$(letters),$(word 2,$(filter $(1)$(v)%,$(2)) $v)))

然后

INPUT := 40b3
firstletter := $(call nextletter,,$(INPUT))
secondletter := $(call nextletter,$(firstletter),$(INPUT))
thirdletter := $(call nextletter,$(firstletter)$(secondletter),$(INPUT))

等等

它很丑,但它与外壳无关

于 2017-01-18T17:58:03.277 回答