在gmake $(shell)函数中转义#

问题描述 投票:0回答:2

我有一个环境变量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却行不通。两次转义会再次给出相同的错误。

那么我该如何实现呢?

bash makefile environment-variables gnu-make
2个回答
2
投票

您还需要加倍美元符号以将其传递到外壳。

GITHUB_BRANCH:=$(shell echo "$${GITHUB_REF\#refs/heads/}")

就其价值而言,此简单的参数扩展可移植到原始的Bourne shell,因此根本不是Bash独有的功能。

当然,make完全能够执行相同的替换,而无需调用外部进程。

GITHUB_BRANCH := $(patsubst refs/heads/%,%,${GITHUB_REF})

1
投票

#可以使用\进行转义,但是您也忘记了转义$

此Makefile起作用:

SHELL:=/bin/bash

foo := $(shell echo "$${SHELL\#/bin/}")

all:
    echo $(foo)
© www.soinside.com 2019 - 2024. All rights reserved.