6

在 bash 4(及更高版本)中,要将存储在 variable 中的字符串的第一个字母大写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 语法吗?

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

4

1 回答 1

8

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

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

在你的 shell 中定义 L1。

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

$(shell L1=$(L1); echo $${L1^})
于 2018-05-01T09:52:23.447 回答