2013-06-13 7 views
12

Questo non funziona:Groovy: Cosa c'è che non va in questo programma "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 

Tuttavia, mettere uno spazio tra l'ultimo doppio e single-citazione funziona ...

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

... anche se bash sembra essere in grado di gestire correttamente l'uscita "' coppia (cioè, senza spazio intermedio) come segue:

Inoltre, mettere tra parentesi il 0.123.argomento funziona bene:

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

Ora, vorrei sapere perché il primo caso non funziona.

sto usando:

  • bash, versione "4.2.45 (1) -release (x86_64-pc-linux-gnu)"
  • Groovy, la versione 2.1.3
+2

Questo non è un problema _bash_, è un problema eccezionale. (_zsh_, _csh_ e _dash_ mostrano tutti il ​​comportamento di salvataggio.) – DaoWen

+0

Strano. 0xFFFF è [nemmeno un punto di codice definito in Unicode] (http://www.fileformat.info/info/unicode/char/ffff/index.htm). –

+0

@RayToal - '0xFFFF' è -1 o EOF (fine del file). – DaoWen

risposta

-2

Questo funziona bene su OSX. Penso che questo errore abbia a che fare con la terminazione impropria. I seguenti gira su Linux:

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

vedo un'eccezione in esecuzione la versione 2.1.3 e 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 

Curiosamente invertendo le citazioni funziona

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

Come BDKosher già detto, questo è un bug della CLI di Apache Commons. Groovy vuole aggiornare a 1.3, ma la gente della CLI si prende tempo con quella versione e contiene incompatibilità.

E come ho già scritto in un commento sopra 0xFFFF viene utilizzato da antlr per mostrare la fine del file, non deve essere un carattere unicode valido per quello. La formulazione è stata criticata a causa di ciò, ma la formulazione proviene dal generatore di parser antlr, non da noi.