String 如何在gmake中返回变量的第一个字符

String 如何在gmake中返回变量的第一个字符,string,makefile,gnu-make,String,Makefile,Gnu Make,使用GNU的make,我想提取变量的第一个字符。目前,我正在使用shell函数让bash执行子字符串。我想知道是否有一种方法可以使用gmake的内置功能实现同样的功能 DIR=/user/$(shell echo "$${USER:0:1}")/$(USER)/ 是一个全面的清单,列出了你可以用gmake内置软件做的一切 不幸的是,在没有$(shell)的情况下提取第一个字符似乎是不可能的。这不是很令人满意,您必须添加到$(缩写),直到您满意为止,但是: INITIALS := a b c d

使用GNU的make,我想提取变量的第一个字符。目前,我正在使用shell函数让
bash
执行子字符串。我想知道是否有一种方法可以使用gmake的内置功能实现同样的功能

DIR=/user/$(shell echo "$${USER:0:1}")/$(USER)/
是一个全面的清单,列出了你可以用gmake内置软件做的一切


不幸的是,在没有
$(shell)
的情况下提取第一个字符似乎是不可能的。

这不是很令人满意,您必须添加到
$(缩写)
,直到您满意为止,但是:

INITIALS := a b c d e f g h i j k l m n o p q r s t u v w x y z
U := $(strip $(foreach a,$(INITIALS),$(if $(USER:$a%=),,$a)))

DIR = /user/$(U)/$(USER)/

也许明智的方法是注意上面提到的
:=
用法,并将您的简单版本修改为
DIR:=…$(shell…
),这样shell命令只调用一次。

如果您可以保证$DIR只在配方中展开,那么您的第一个定义有什么问题?(稍微调整)DIR=/user/${user:0:1}/$$user/all:echo“user:[$$user]DIR:[${DIR}]”