【发布时间】:2020-01-08 09:14:30
【问题描述】:
我有一个环境变量 GITHUB_REFS,我想对其执行一些 bashism 并从 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 无效。双重转义它再次给出相同的错误。
那么我该如何解决呢?
【问题讨论】:
-
您是否尝试过定义一个只包含
#的Make 变量?这是一种经常用于空间等的技术。此外,您忘记转义$- 应该是$${GITHUB_REF#refs/heads/} -
不应该先把括号合上,像这样吗?
$(shell echo "${GITHUB_REF}#refs/heads/") -
@Tim 不,OP 正在尝试使用 shell 的 parameter expansion 功能。
-
那么我建议使用
$$和\#转义$和#
标签: bash makefile environment-variables gnu-make