我有一个环境变量GITHUB_REFS
,我想对其进行一些重击,并从GNU makefile的另一个变量GITHUB_BRANCH
中捕获结果。我的幼稚方法看起来像这样:
SHELL:=/bin/bash
GITHUB_BRANCH:=$(shell echo "${GITHUB_REF#refs/heads/}")
如果我自己运行bashism,它可以正常运行,但是当运行上面的makefile时,它失败并显示:
Makefile:2: *** unterminated call to function 'shell': missing ')'. Stop.
我试图将#
转义为\#
,因为这是一个合理的罪魁祸首,实际上Makefile起作用了,但是bashism却行不通。两次转义会再次给出相同的错误。
那么我该如何实现呢?
您还需要加倍美元符号以将其传递到外壳。
GITHUB_BRANCH:=$(shell echo "$${GITHUB_REF\#refs/heads/}")
就其价值而言,此简单的参数扩展可移植到原始的Bourne shell,因此根本不是Bash独有的功能。
当然,make
完全能够执行相同的替换,而无需调用外部进程。
GITHUB_BRANCH := $(patsubst refs/heads/%,%,${GITHUB_REF})
#
可以使用\
进行转义,但是您也忘记了转义$
。
此Makefile起作用:
SHELL:=/bin/bash
foo := $(shell echo "$${SHELL\#/bin/}")
all:
echo $(foo)