我刚开始使用Groovy。我找不到任何关于如何处理Groovy脚本的参数的例子,所以我自己攻击了这个方法。必须有更好的方法来做到这一点?如果是这样,我正在寻找更好的方法,因为我可能忽略了显而易见的事情。
import groovy.lang.Binding;
Binding binding = new Binding();
int x = 1
for (a in this.args) {
println("arg$x: " + a)
binding.setProperty("arg$x", a);
x=x+1
}
println binding.getProperty("arg1")
println binding.getProperty("arg2")
println binding.getProperty("arg3")
答案 0 :(得分:95)
很抱歉提问。我只是想通了:
println args[0]
println args[1]
println args[2]
答案 1 :(得分:33)
如果您想获得更高级的解析而不仅仅是获取参数,您可以使用Groovy CliBuilder来帮助您。它可以帮助您使用命令行标志,可选参数和打印使用说明。
结帐CliBuilder的Javadoc或MrHakis post。
答案 2 :(得分:15)
最简单的方法是将this.args
用作数组,例如:
<强> test.groovy 强>
println this.args[0]
呼叫:
C:>groovy test this
输出:
this
答案 3 :(得分:5)
试试这个:
args.each{println it}
答案 4 :(得分:2)
它与Java非常相似,您可以使用相同的java语法。例如。
class TestExecutor {
public static void main(def args) {
println("Printing arguments");
for(String arguments : args) {
println (arguments);
}
}
}
运行它,您应该看到打印的参数
C:\Users\athakur\Desktop>groovy TestExecutor.groovy test1 test2 test3
Aug 16, 2014 11:47:56 AM org.codehaus.groovy.runtime.m12n.MetaInfExtensionModule
newModule
WARNING: Module [groovy-nio] - Unable to load extension class [org.codehaus.groo
vy.runtime.NioGroovyMethods]
Printing arguments
test1
test2
test3
另请注意,如果您不提供main方法或提供上述示例中的方法,则可以将参数作为args[i]
获取,但您可以更改数组的名称(同样与java相同)。所以你可以有类似的东西 -
public static void main(def argsNew) {
println("Printing arguments");
for(String arguments : argsNew) {
//using args in above for loop will throw error
println (arguments);
}
}
指出它不是硬编码的东西。最后,如其他答案所示,您始终可以使用CliBuilder进行智能解析。但同样在内部使用def options = cli.parse(args)
。
答案 5 :(得分:0)
如果使用--compile-static
或--type-checked
选项运行脚本,则args
变量将不可见,因此编译会引发错误:
[静态类型检查]-未声明变量[args]。
我喜欢在脚本顶部执行以下操作:
import groovy.transform.Field
@Field String[] args = binding.getVariable('args') as String[]
这会将args
作为全局变量公开,可以在脚本中的任何地方使用。