如何使用case语句在配方内设置变量?

时间:2018-10-05 16:18:44

标签: shell makefile switch-statement gnu-make

我有以下代码片段,无法弄清楚为什么它不起作用:

contactID

输出:

test-%:
    # this works
    case $* in a) echo A;; b) echo B;; esac
    # this doesn't
    $(eval MY_VAR := \
        $(shell case $* in a) echo A;; b) echo B;; esac ))
    echo $(MY_VAR)

我怀疑我需要转义一些字符,但我不知道哪个字符。我尝试使用\)修复了vim中突出显示的语法,但是仍然无法正常工作。

1 个答案:

答案 0 :(得分:1)

您不能使用case的shell快捷方式,因为$(eval …)需要匹配的括号,因此您可以省略左括号。相反,您需要编写以下代码:

    $(eval MY_VAR := \
        $(shell case $* in (a) echo A;; (b) echo B;; esac ))

$(eval …),即使嵌套在这样的配方中,也仍将被解析为顶层makefile片段,但这也许就是您想要的。