Bash Makefile:在条件语句中使用命令输出

Bash Makefile:在条件语句中使用命令输出,bash,makefile,conditional-statements,Bash,Makefile,Conditional Statements,在makefile中,我想使用一个shell命令,比如command1=[some program][--flags],然后使用一个条件来查看输出是否包含使用grep的某个关键字 我的代码不起作用: var=$([command 1] | grep [keyword]) if [ -z ${var} ]; then \ [command 2, with variables in it]; \ [command 3, with variables in it]; \ fi 你知道为什么吗?你展示

在makefile中,我想使用一个shell命令,比如command1=[some program][--flags],然后使用一个条件来查看输出是否包含使用grep的某个关键字

我的代码不起作用:

var=$([command 1] | grep [keyword])
if [ -z ${var} ]; then \
[command 2, with variables in it]; \
[command 3, with variables in it]; \
fi

你知道为什么吗?

你展示的不是make语法,而是shell语法。所以我假设这是制作配方的一部分。你的问题是:

  • make recipes的每一行都传递到不同的shell。因此,不能将shell变量从一行传递到下一行。使用单个shell命令列表和行继续(
    ;\
    )将整个配方传递给单个shell

  • Make在将配方传递到外壳之前展开配方。通过将要保留的
    $
    符号加倍(
    ${var}
    )来转义make扩展。对所有shell变量展开执行相同的操作。您还可以用等效的反勾符号“`代替
    $()
    命令替换,而不是
    $()


  • 将要运行的命令放在shell脚本中,并使用运行它并将其输出保存在变量中。谢谢。我需要命令中脚本中的一些局部变量。还可以吗?作为参数传递给命令或脚本。我还不能升级投票,因为我是新手,但这很有效。非常感谢。即使你不能投票,你也可以接受答案,这对其他试图解决类似问题的人很有用。
     target: prerequisite ...
         var=`[command 1] | grep [keyword]`; \
         if [ -z "$${var}" ]; then \
             [command 2, with variables in it]; \
             [command 3, with variables in it]; \
         fi