在Bash中,转换变量A
的内容可以通过${A,,}
来实现。在Makefile中,这不再起作用了。以下代码
default:
@for i in a b CCC; do \
echo $${i,,}; \
done
产生错误
$ make
/bin/sh: 2: Bad substitution
make: *** [default] Error 2
如何将Makefile中的变量转换为小写?
答案 0 :(得分:3)
make使用的shell是/bin/sh
,它是一个符合POSIX标准的shell,而不是bash。如果你想用bash写你的食谱,那就告诉你那是你想要的:
SHELL = /bin/bash
或者,以符合标准的方式编写食谱,例如:
default:
@for i in a b CCC; do \
echo $$i | tr A-Z a-z; \
done
答案 1 :(得分:3)
GNU Make Standard library有一个用纯Make编写的函数(lc
)。这可以让你做这样的事情并避免特定于shell的东西:
default:
@$(foreach i,a b CCC,echo $(call lc,$(i));)