Groovy:这个“Hello World”程序有什么问题?

15

这行代码无法工作:

$ groovy -e 'println "Hello, world!"'
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
script_from_command_line: 1: unexpected char: 0xFFFF @ line 1, column 23.
   println "Hello, world!
                         ^

1 error

然而,在最后一个双引号和单引号之间加一个空格可以解决这个问题...

$ # groovy -e 'println "Hello, world!"'
$   groovy -e 'println "Hello, world!" '
Hello, world!

尽管 bash 程序似乎可以正确地处理结尾的 "' 一对(即,没有任何间隔空格),如下所示:

$ echo '"Hello, world!"'
"Hello, world!"

同样,给 println 的参数加上括号也能正常工作:

$ groovy -e 'println ("Hello, world!")'
Hello, world!

现在,我想知道为什么第一个案例不起作用。

我正在使用:

  • bash,版本为 "4.2.45(1)-release (x86_64-pc-linux-gnu)"
  • groovy,版本为 2.1.3

2
这不是一个_bash_问题,而是一个groovy问题。(zsh, _csh_和_dash_都表现出相同的行为。) - DaoWen
奇怪。0xFFFF在Unicode中甚至不是一个定义的代码点。 - Ray Toal
1
可能是这样,但这意味着错误非常愚蠢。如果你要说你有一个char,并且你给出了一个看起来像代码点的东西,你不应该为它编造一个含义!我认为Groovy的人应该比那聪明。在Unicode中没有char 0xFFFF,所以他们应该使用不同的措辞。 #爱挑剔 - Ray Toal
2
他们声称这是Commons CLI的问题,但我在Groovy控制台中也看到了同样的问题。http://jira.codehaus.org/browse/GROOVY-4828 - bdkosher
1
这是一个Commons CLI的bug。一旦版本可用,就有一个任务要更改它 http://jira.codehaus.org/browse/GROOVY-5282 - Will
显示剩余7条评论
3个回答

4
如BDKosher所述,这是Apache Commons CLI的一个bug。Groovy希望更新到1.3版本,但CLI团队在处理该版本时需要时间,并且它包含不兼容性。
正如我在上面的评论中已经写过的那样,0xFFFF被antlr用来显示文件结尾,它并不一定是一个有效的Unicode字符。这个措辞受到了批评,但这个措辞是来自解析器生成器antlr,而不是我们自己的措辞。

0

我在运行版本为2.1.3和Java 6的时候遇到了一个异常:

    C:\Users\mwest>groovy -e 'println "Hello, world!"'
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
script_from_command_line: 1: expecting ''', found '<EOF>' @ line 1, column 9.
   'println

有趣的是,反转引号也可以起作用

C:\Users\mwest>groovy -e "println 'Hello, world!'"
Hello, world!

-2

在OSX上运行良好。我认为这个错误与不当终止有关。以下内容在Linux上运行:

groovy -e 'println "Hello, world!";'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接