代码之家  ›  专栏  ›  技术社区  ›  Rubin

GNU shell函数出现意外标记“(”附近的语法错误

  •  2
  • Rubin  · 技术社区  · 6 年前

    我想在makefile中确定Intel Fortran编译器的版本,因此我添加了一些脚本,使用 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所述

    我想你需要引用 VERIFORT公司 变量,以便shell不会解释特殊字符。

    引用 VERIFORT公司 变量产生以下结果( 格雷普 版本)

    echo 'ifort (IFORT) 18.0.2 20180210'
    ifort (IFORT) 18.0.2 20180210
    

    并且没有发生错误。

    我还使用 回响 在终端中

    echo ifort (IFORT) 18.0.2 20180210
    

    产生了同样的错误

    bash: syntax error near unexpected token `('
    
    1 回复  |  直到 6 年前
        1
  •  4
  •   MadScientist    6 年前

    您似乎没有显示 make 命令我想在这个错误消息之前, 制作 已打印an echo 行(除非您显示的makefile实际上不是您调用的,并且您的实际makefile添加了 @ 在回声之前。。。在这种情况下,您应该在调试时删除它)。如果你告诉我们输出是什么,那么问题就更清楚了。此外,您没有显示 ifort --version 命令是指从命令行运行它,但我认为它可能包含括号。

    我想你需要引用 VERIFORT 变量,以便shell不会解释任何特殊字符:

    test:
            echo '$(VERIFORT)'
    
    推荐文章