GNU shell 函数在意外标记 `(' 附近出现语法错误
syntax error near unexpected token `(' with GNU shell function
我想在我的 makefile 中确定 Intel Fort运行 编译器的版本,所以我使用 GNU shell
函数添加了一些脚本,如下所示用于测试,
VERIFORT := $(shell ifort --version)
#VERIFORT := $(shell ifort --version | grep ^ifort) # error occurred too
.PHONY: test
test:
echo $(VERIFORT)
如果您复制上面显示的那些代码行,请确保在 echo
命令之前有一个制表符。
这给了我一些错误
/bin/sh: -c: line 0: syntax error near unexpected token `('
当我在终端中运行命令ifort --version
或ifort --version | grep ^ifort
时,它给出了正确的结果并且没有发生错误。
我的系统:64位CentOS 7
感谢任何更正建议。
[编辑]
添加更多输出细节:
使用 grep
版本的 VERIFORT
,make
命令产生以下结果,
echo ifort (IFORT) 18.0.2 20180210
/bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `echo ifort (IFORT) 18.0.2 20180210'
make: *** [test] Error 1
[已解决]
原来是@MadScientist
提到的echo
使用问题
I think you need to quote the value of the VERIFORT
variable when you print it, so that the shell doesn't interpret special characters.
引用 VERIFORT
变量产生了以下结果(grep
版本)
echo 'ifort (IFORT) 18.0.2 20180210'
ifort (IFORT) 18.0.2 20180210
并且没有发生错误。
我也在终端echo
中测试了它
echo ifort (IFORT) 18.0.2 20180210
产生了同样的错误
bash: syntax error near unexpected token `('
您似乎没有显示 make
命令的完整输出。我认为在此错误消息之前,make
打印了一个 echo
行(除非您向我们展示的 makefile 实际上不是您调用的内容,并且您的实际 makefile 在 echo 之前添加了一个 @
。 .. 在这种情况下,您应该在调试时将其删除)。如果您向我们展示了那个输出是什么,那么问题是什么会更清楚。此外,当您从命令行 运行 时,您没有显示 ifort --version
命令的输出是什么,但我认为它可能包含括号。
我认为您需要在打印时引用 VERIFORT
变量的值,这样 shell 就不会解释任何特殊字符:
test:
echo '$(VERIFORT)'
我想在我的 makefile 中确定 Intel Fort运行 编译器的版本,所以我使用 GNU shell
函数添加了一些脚本,如下所示用于测试,
VERIFORT := $(shell ifort --version)
#VERIFORT := $(shell ifort --version | grep ^ifort) # error occurred too
.PHONY: test
test:
echo $(VERIFORT)
如果您复制上面显示的那些代码行,请确保在 echo
命令之前有一个制表符。
这给了我一些错误
/bin/sh: -c: line 0: syntax error near unexpected token `('
当我在终端中运行命令ifort --version
或ifort --version | grep ^ifort
时,它给出了正确的结果并且没有发生错误。
我的系统:64位CentOS 7
感谢任何更正建议。
[编辑]
添加更多输出细节:
使用 grep
版本的 VERIFORT
,make
命令产生以下结果,
echo ifort (IFORT) 18.0.2 20180210
/bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `echo ifort (IFORT) 18.0.2 20180210'
make: *** [test] Error 1
[已解决]
原来是@MadScientist
提到的echo
使用问题
I think you need to quote the value of the
VERIFORT
variable when you print it, so that the shell doesn't interpret special characters.
引用 VERIFORT
变量产生了以下结果(grep
版本)
echo 'ifort (IFORT) 18.0.2 20180210'
ifort (IFORT) 18.0.2 20180210
并且没有发生错误。
我也在终端echo
中测试了它
echo ifort (IFORT) 18.0.2 20180210
产生了同样的错误
bash: syntax error near unexpected token `('
您似乎没有显示 make
命令的完整输出。我认为在此错误消息之前,make
打印了一个 echo
行(除非您向我们展示的 makefile 实际上不是您调用的内容,并且您的实际 makefile 在 echo 之前添加了一个 @
。 .. 在这种情况下,您应该在调试时将其删除)。如果您向我们展示了那个输出是什么,那么问题是什么会更清楚。此外,当您从命令行 运行 时,您没有显示 ifort --version
命令的输出是什么,但我认为它可能包含括号。
我认为您需要在打印时引用 VERIFORT
变量的值,这样 shell 就不会解释任何特殊字符:
test:
echo '$(VERIFORT)'