在Makefile中使用Bash 4语法将字符串的第一个字母大写

7
在bash 4及以上版本中,如果想将存储在变量中的字符串的第一个字母大写,可以执行以下操作:
L1=en
Ll1=${L1^}
echo $Ll1

这将打印出En

我正在尝试在Makefile中做类似的事情,但我无法让${L1^}语法起作用。

SHELL := /bin/bash

L1 = en
Ll1 := $(shell echo ${L1^})

all:
    @echo $(Ll1)

产生空白输出。

我能否使用这种bash语法使其工作,而不需要使用tr/sed?

P.S. 我确实需要将其分配给一个变量,而不是直接回显它。我正在使用bash 4.3.48和GNU make 4.1。


$(shell echo $${$(L1)^}) - user657267
1个回答

9

您的makefile有两个问题,首先变量L1在make中被定义,但在调用shell时不可访问,请使用以下代码:

$(shell L1=$(L1); echo ...)

在您的shell中定义L1。

为了不被make解释,需要转义美元符号:

$(shell L1=$(L1); echo $${L1^})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接