【发布时间】:2018-02-14 00:14:11
【问题描述】:
我正在尝试使用 apache commons CLI 解析我的命令行参数。这里的示例可能有点笨拙,但在我正在创建的程序的上下文中它是有意义的。我正在尝试读取文件模式过滤器,类似于 grep 用于选择要处理的文件。
我的论点如下所示:
Program --input *.*
我写了一个测试程序来看看解析器看到了什么;
public static void main(String[] args) {
Options options = new Options();
options.addOption(new Option(INPUT_FILTER_SHORT, INPUT_FILTER_LONG, true, INPUT_FILTER_DESCRIPTION));
CommandLineParser parser = new BasicParser();
CommandLine cmd = parser.parse(options, args);
System.out.println(cmd.getOptionValue(INPUT_FILTER_SHORT));
}
打印出来:
.classpath
如果我将参数更改为:
Program --input test.txt
我得到了输出:
test.txt
我假设我必须做一些事情来告诉 apache commons 什么 * 不是特殊字符?我似乎无法在网上找到有关此的任何信息。
我在 Windows (7) 上遇到了这种情况。我相当确定是 *.* 导致了问题,因为当我切换到使用不使用 * 的模式时,会出现预期的模式。
【问题讨论】:
-
如果用引号将
*.*括起来会发生什么(尝试单引号和双引号)?示例:Program --input "*.*" -
我刚刚更新了帖子,但这发生在 Windows 7 上。当我用单引号括起来时,它会打印出 '.'(包括引号),当我双引号,它打印出'.classpath'
标签: java apache command-line apache-commons-cli