As defined in the groovysh documentation page, by default all variables are untyped and thus using def or specific type identifier (like String) does not work. In this case, the proper syntax is just str = "abcd".
$ groovysh
Groovy Shell (3.0.6, JVM: 11.0.6)
Type ':help' or ':h' for help.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
groovy:000> str = "abcd"
===> abcd
groovy:000> str
===> abcd
groovy:000> :S variables
Variables:
str = abcd
_ = abcd
===> [str:abcd, _:abcd]
As you can see in the example above, you can list all variables that are registered in the shell session with the :S variables command. (You can list all available commands with :h executed in the shell window.)
However, there is a way to turn on typed variables. This is called the interpreted mode and it can be activated with := interpretedMode command like in the example below:
$ groovysh
Groovy Shell (3.0.6, JVM: 11.0.6)
Type ':help' or ':h' for help.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
groovy:000> str = "abcd"
===> abcd
groovy:000> str
===> abcd
groovy:000> :S variables
Variables:
str = abcd
_ = abcd
===> [str:abcd, _:abcd]
groovy:000> := interpreterMode
groovy:000> String str2 = "efgh"
===> efgh
groovy:000> str2
===> efgh
groovy:000> str == str2
===> false
groovy:000> :S variables
Variables:
str = abcd
_ = false
groovysh_collected_boundvars = [str2:efgh]
str2 = efgh
===> [str:abcd, _:false, groovysh_collected_boundvars:[str2:efgh], str2:efgh]