Bash Makefile比较产生shell命令的字符串

Bash Makefile比较产生shell命令的字符串,bash,makefile,Bash,Makefile,我的makefile中有以下内容(较大的多行bash脚本的一部分)。变量A,B来自通过$$(…)执行的shell命令,但下面的代码足以重现问题: test: A=1; \ B=2; \ diff < ( echo $$A ) < ( echo $$B ) || exit 1 测试: A=1\ B=2\ 差异

我的makefile中有以下内容(较大的多行bash脚本的一部分)。变量
A
B
来自通过
$$(…)
执行的shell命令,但下面的代码足以重现问题:

test:
    A=1; \
    B=2; \
    diff < ( echo $$A ) < ( echo $$B ) || exit 1
测试:
A=1\
B=2\
差异<(回声$$A)<(回声$$B)|退出1
意外标记“(”附近出现语法错误


如何在make中实现这一点?我知道Makefile中有
ifeq
和类似的功能,但我想它不适合Makefiles中的多行bash脚本。

默认shell是
/bin/sh
,它没有进程替换。 您需要更改外壳:

SHELL:=/bin/bash
test:
    A=1; \
    B=2; \
    diff <( echo $$A ) <( echo $$B ) || exit 1
SHELL:=/bin/bash
测试:
A=1\
B=2\

diff默认shell是
/bin/sh
,它没有进程替换。 您需要更改外壳:

SHELL:=/bin/bash
test:
    A=1; \
    B=2; \
    diff <( echo $$A ) <( echo $$B ) || exit 1
SHELL:=/bin/bash
测试:
A=1\
B=2\

diff进程替换的正确语法是

<( echo $$A )

或者其他支持它的shell。

进程替换的正确语法是

<( echo $$A )

或者其他支持它的shell。

不要在他的Makefile上下文中的
@User112638726之间留空格,
$$
将导致shell seing
$
@PSkocik啊,对了,我的错。不要在他的Makefile上下文中的
@User112638726之间留空格,
$$
将导致shell seing
$
@PSkocik啊,对了,我的错。谢谢,我最终用bash shebang将所有与bash相关的东西拉到了一个单独的
.sh
文件中。谢谢,我用bash shebang将所有与bash相关的东西拉到了一个单独的
.sh
文件中