在makefile中,当我在bash函数中使用if语句时会抛出错误

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

在makefile中,当我在bash函数中使用if语句时会抛出错误

test : 
        foo() { if [[ "a" == "a" ]] ; then echo $$1 ; fi ; } ; foo "hello"

错误

// bin / sh:1:1:[[:找不到

或带有一个[

test : 
        foo() { if [ "a" == "a" ] ; then echo $$1 ; fi ; } ; foo "hello"

错误

/ bin / sh:1:1:[:a:意外的运算符

在这种情况下如何使用if语句

bash makefile
2个回答
2
投票

您正在使用bash特有的功能。 Make不运行用户的外壳程序,默认情况下始终使用/bin/sh。在某些系统上,/bin/sh是指向/bin/bash的链接,您的makefile将起作用。在其他系统上,/bin/sh是指向POSIX Shell的链接,例如dash

POSIX不允许[[ ... ]],它仅使用[ ... ]。另外,在POSIX中,测试相等性为=,而不是==。仅bash允许==作为扩展名。

因此,如果您希望您的命令符合POSIX,则必须是:

test : 
        foo() { if [ "a" = "a" ]; then echo $$1; fi; }; foo "hello"

2
投票

似乎/bin/sh不是/bin/bash。您需要在Makefile中设置外壳程序:

SHELL = /bin/bash
© www.soinside.com 2019 - 2024. All rights reserved.