繁体   English   中英

如何在Groovy的命令行参数中使用星号(*)?

[英]How can i use asterisk(*) in command line arguments in groovy?

直升机!

我有一个带有一个参数的普通脚本。 该参数必须是正则表达式模式。 我想在参数中使用*,但总是得到: 该命令的语法不正确。

这是一个示例(opt.p是从arg获取的模式):

    def map1 = [e:'pine___apple', f:'pineapple']
    map1.each { entry ->
                entry.value.find(~/$opt.p/) { match -> println entry.value}
                }

我想通过这种方式从命令行使用脚本:

常规测试-p pine_ * a

我希望结果将是:

菠萝
菠萝

我尝试了这些解决方案以及更多解决方案,但没有任何效果:
pine_*a
"pine_*a"
'pine_*a'
pine_\\*a
'pine_\\*a'
"pine_\\*a"
pine_'\\*'a
pine_"\\*"a
pine_'\\\\*'a
pine_"\\\\*"a

有人知道如何解决这个问题吗? 非常感谢!

编辑:
我用:
Groovy版本:2.4.6 JVM:1.7.0_45供应商:Oracle Corporation操作系统:Windows 7
我也使用CliBuilder:

def cli = new CliBuilder()
        cli.with
        {
            p('pattern', args: 1, required: false)
        }   
        def opt = cli.parse(args)

下面的常规脚本:

def map = [e:'pine___apple', f:'pineapple']
map.each { k, v ->
  v.find(~/${args[0]}/) { println "key: $k, value: $v -> ${v.find(args[0])}" }
}

在调用时输出以下内容:

$ groovy test.groovy pine_*a
Checking key: e, value: pine___apple -> pine___a
Checking key: f, value: pineapple -> pinea

或排除以下地图条目之一:

$ groovy test.groovy "pine_{1,9}a"
key: e, value: pine___apple -> pine___a

不确定脚本的问题是什么。 也许像其中一项评论所建议的那样处理opts.p。

编辑1

Tim Yates在回答中提到的一种替代CliBuilder语法:

def opt = new CliBuilder().with {
    p longOpt: 'pattern', args: 1
    parse(args)
} 

编辑2:解决方案

因为这被标记为可接受的答案,所以我将在此处添加最终的解决方案(我在下面对此发表了评论,但是在浏览该解决方案时,评论不会立即显而易见)。

此问题是由用于启动groovy的Windows groovy发行版startgroovy.bat文件中的错误引起的( 请参阅单独的stackoverflow线程 )。 问题出在Windows执行和参数处理上,它出现在Groovy程序甚至开始执行之前。 很有可能在groovy的更高版本中已修复了该问题,因此值得尝试升级到最新版本。 如果没有,上述线程中的答案应该可以修复startgroovy.bat

认为这是您捕获opt

我假设您正在使用CliBuilder

而且我怀疑您错过了args: 1 p参数定义中的args: 1

def opt = new CliBuilder().with {
    it.p('pattern', args: 1)
    parse(args)
}  

def map1 = [e:'pine___apple', f:'pineapple']
map1.each { entry ->
    entry.value.find(~/$opt.p/) { match -> println entry.value}
}

就像您描述的那样对我有效...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM