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

Capitalize first letter of string in Makefile using bash 4 syntax

在bash 4(及以上)中,要将存储在变量L1中的字符串的首字母大写,我可以执行以下操作:

L1=en
Ll1=${L1^}
echo $Ll1

这会打印 En.

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

SHELL := /bin/bash

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

all:
    @echo $(Ll1)

产生空白输出。

我可以在不求助于 tr/sed 的情况下使用这种 bash 语法吗?

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

您的 makefile 中有两个问题,首先,变量 L1 是在 make 中定义的,在您调用 shell 时无法访问,请使用:

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

在 shell 中定义 L1。

美元符号需要转义才能不被 make 解释:

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