apache.commons.cli 和 "long" 中的命令行参数 Java

apache.commons.cli and "long" command-line parameters in Java

是否可以在 java 中将 'long' 参数用于带有 apache.commons.cli.CommandLineParser 的命令行选项? 'Long' 我的意思不是一个单词,而是用块引号 ('"') 表示的一个句子。Java 应用程序正在从 bash-脚本文件启动。

脚本文件:

#!/bin/bash
java -cp <classpath> MyClass $@

调用(returns 仅 "long" 用于“-p”参数,"another" 用于“-r”参数):

./script.sh -p "long parameter" -r "another long parameter"

现在我只能做这样的事情来得到"long parameter"字符串:

./script.sh -p "long" -p "parameter"

当然,我可以根据需要多次以编程方式添加“-p”,但这会阻止我使用“-”登录参数值,因为我需要跟踪其他命令行开关。此外,这似乎不是正确的方法。

命令行选项是这样创建的:

org.apache.commons.cli.Options options = new Options();
options.addOption(Option.builder("p").longOpt("param").hasArg().desc("parameter description").build());

然后这样解析:

CommandLineParser parser = new DefaultParser();
CommandLine         line = parser.parse( options, args );
if (line.hasOption('p')) params = line.getOptionValues("param");

终于清楚(感谢 Jim Garrison)问题是由从 bash-脚本调用 java class(使用 $@ 传递所有参数)引起的。在脚本中将 $@ 包装成双引号解决了这个问题。像这样:

#!/bin/bash
java -cp <path> MyClass "$@"

而不是不正确

#!/bin/bash
java -cp <path> MyClass $@