Anaphory
Anaphory

Reputation: 6412

Get the first letter of a make variable

Is there a better way to get the first character of a GNU make variable than

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

(which is not only unwieldy but also calls the external shell)?

Upvotes: 8

Views: 7516

Answers (3)

RoboCodoDodo
RoboCodoDodo

Reputation: 39

Since I came across this in my own search and didn't find what I was looking for here is what I ended up using to parse a hex number that could be applied to any known set of characters

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)))

then

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

etc.

It's ugly but it's shell agnostic

Upvotes: 0

Jonathan Wakely
Jonathan Wakely

Reputation: 171383

The GNU Make Standard Library provides a substr function

substr

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

I haven't tested it, but $(call substr,$(VARIABLE),1,1) should work

Upvotes: 3

Beta
Beta

Reputation: 99134

This is pretty horrible, but at least it doesn't invoke shell:

$(eval REMAINDER := $$$(VAR))          # variable minus the first char
FIRST := $(subst $(REMAINDER),,$(VAR)) # variable minus that

Upvotes: 10

Related Questions