命令行参数的问题,其中包含空格

我遇到了一个奇怪的问题,经过大量的调试,我发现了原因。 我有一个Java程序,我通过bash脚本在Linux环境中执行。

这是我的简单bash脚本,它接受一个String。

#!/bin/bash java -cp com.QuoteTester $1 

问题是命令行参数可以是Spaces还是Without Space。 例如,它可以是

 Apple Inc. 2013 Jul 05 395.00 Call OR Apple 

根据我的代码,就是这样

 public static void main(String[] args) { String symbol = args[0]; if (symbol.trim().contains(" ")) // Option { } else // Stock { } 

所以问题在于,当我试图以这种方式执行它时

./quotetester Apple Inc. 2013年7月5日395.00致电

它唯一总是去了股票的else condition

无论如何我能解决这个问题吗?

当您使用空格传递命令行参数时,它们将被视为空格分隔的参数,并在空间上进行拆分。 所以,你实际上没有一个参数,而是多个参数。

如果要使用空格传递参数,请使用引号:

 java classname "Apple Inc. 2013 Jul 05 395.00 Call" 

这本身不是Java问题。 这是一个shell问题,适用于您使用此类参数调用的任何内容。 你的shell正在拆分参数并将它们分别提供给Java进程。

你必须引用这些参数,以便shell不会拆分它们。 例如

 $ java -cp ... "Apple Inc. 2013" 

等。请看这里进行更长时间的讨论 。

参数由shell处理,因此任何终端设置都不应影响这一点。 你只需要引用参数就可以了。

单引号是最佳选择

空格和双引号可以通过这种方式解决。

 java QuerySystem '((group = "infra") & (last-modified > "2 years ago"))'