2013-07-12 29 views
4

我在一个奇怪的问题,为此我发现了原因,经过大量的调试后触击。 我有一个Java程序,我正在Linux环境中通过bash脚本执行。问题与命令行参数中有它的空间

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

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

问题是命令行参数可以是空格或空格。 例如,它可以是

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临时t是股票。

有反正我可以解决这个??

+0

因为这不是shell的工作方式。如果您希望将其作为一个参数,则需要引用/转义 –

+0

[Java命令行参数中的空间可能重复](http://stackoverflow.com/questions/743454/space-in-java-command-line -arguments) –

+0

如何在arg周围使用引号? –

回答

14

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

如果你想传递参数用空格,使用引号:

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

这不是一个Java问题本身。这是一个shell问题,适用于你用这样的参数调用的任何东西。你的shell正在分解参数并将它们分别提供给Java进程。

您必须引用参数,以便shell不会将其分开。例如

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

等 见here for a longer discussion

1

参数由shell处理,所以任何终端设置都不应该影响这个参数。你只需要引用参数,它应该工作。