【发布时间】:2016-11-06 19:06:38
【问题描述】:
是否可以在 java 中通过 apache.commons.cli.CommandLineParser 对命令行选项使用“长”参数? 'Long' 我的意思不是一个单词,而是块引号 ('"') 中的一个句子。Java 应用程序正在从 bash-script 文件启动。
脚本文件:
#!/bin/bash
java -cp <classpath> MyClass $@
调用(对于“-p”参数仅返回“long”,对于“-r”参数返回“another”):
./script.sh -p "long parameter" -r "another 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");
【问题讨论】:
-
longOpt指的是选项的name,而不是选项值的长度。是否将长字符串传递给您的代码取决于所涉及的 shell。您使用的是什么操作系统和外壳? -
我在 MacOSX 上的 Bash shell 中这样做
-
您使用的是哪个 shell,它是否使用双引号将字符串括起来?
-
我使用 bash 并且对于参数值,我使用双引号将字符串括起来(正如我在问题中所写的那样),字面意思是:# java ClassName -p "value1 value2 value3"
-
如果您想查看 CLI 接收的内容,只需执行
System.out.println(args);其中args是您的main方法的参数。这将告诉您 shell 是否正确传递了引用的字符串。将输出添加到您的问题中。
标签: java bash command-line-arguments