Groovy: Что случилось с этой программой Hello World?

Это не работает:

$ 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

Ответ 1

Как уже отмечал BDKosher, это ошибка в CLI Apache Commons. Groovy хочет обновить до 1.3, но люди CLI не спешат с этой версией и содержат несовместимости.

И как я уже писал в вышеприведенном комментарии, 0xFFFF используется antlr для отображения конца файла, для этого он не должен быть действительным символом Unicode. Из-за этого формулировка была подвергнута критике, но формулировка исходит от генератора парсера antlr, а не от нас.

Ответ 2

Я вижу, что запущенная версия 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!

Ответ 3

Это отлично работает на OSX. Я думаю, что эта ошибка связана с неправильным завершением. Следующие действия выполняются в linux:

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