在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特有的功能。 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"
似乎/bin/sh
不是/bin/bash
。您需要在Makefile中设置外壳程序:
SHELL = /bin/bash