Сделать первую букву строки в Makefile заглавной, используя синтаксис bash 4

В bash 4 (и выше), чтобы сделать первую букву строки, хранящейся в переменной L1, заглавной, я могу сделать следующее:

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.


person Proyag    schedule 01.05.2018    source источник


Ответы (1)


У вас есть две проблемы в вашем make-файле: во-первых, переменная L1 определена в make и недоступна в вашем вызове вашей оболочки, используйте:

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

чтобы определить L1 в вашей оболочке.

Знак доллара необходимо экранировать, чтобы он не интерпретировался командой make:

$(shell L1=$(L1); echo $${L1^})
person andlrc    schedule 01.05.2018