在 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 语法吗?
附言我确实需要将其分配给一个变量,而不是直接回显它。 我正在使用 bash 4.3.48 和 GNU make 4.1。
你的 makefile 中有两个问题,首先变量 L1 是在 make 中定义的,在你对 shell 的调用中无法访问,请使用:
$(shell L1=$(L1); echo ...)
以在外壳中定义 L1。
美元符号需要转义才能不被 make 解释:
$(shell L1=$(L1); echo $${L1^})