Java 命令行参数中包含空格时出现问题

Java 命令行参数中包含空格时出现问题,java,bash,Java,Bash,我有一个Java程序,我正在Linux环境中通过bash脚本执行它 这是我的简单bash脚本,它接受一个字符串 #!/bin/bash java -cp com.QuoteTester $1 问题是命令行参数可以有空格,也可以没有空格 例如,它可以是: Apple Inc. 2013 Jul 05 395.00 Call 或 我的代码是: public static void main(String[] args) { String symbol = args[0];

我有一个Java程序,我正在Linux环境中通过bash脚本执行它

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

#!/bin/bash
java -cp  com.QuoteTester $1
问题是命令行参数可以有空格,也可以没有空格

例如,它可以是:

Apple Inc. 2013 Jul 05 395.00 Call   

我的代码是:

public static void main(String[] args) 
{
    String symbol = args[0];

    if (symbol.trim().contains(" ")) // Option
    {

    }

    else  // Stock 
    {

    }
}
所以问题是,当我试图以这种方式执行它时:

./quotetester Apple Inc. 2013 Jul 05 395.00 Call
它只会始终转到
else条件
,即股票


还有什么我可以解决的吗?

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

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

java classname "Apple Inc. 2013 Jul 05 395.00 Call"
这本身不是Java问题。这是一个shell问题,适用于使用此类参数调用的任何对象。您的shell正在拆分参数并将它们分别提供给Java进程

您必须引用这些参数,以便shell不会将它们拆分。e、 g

$ java  -cp ... "Apple Inc. 2013"
等等。
请参阅。

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

单引号是最好的选择

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

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

在原来的问题中,OP使用shell脚本调用java命令行,并希望shell脚本传递参数,而不执行输入解释的空白解释(Word S分裂)选项。

如果你知道有多少个参数,那么你可以双引号的参数

#!/bin/bash
java -cp  com.QuoteTester "$1"
因此,将此脚本另存为quotetester.sh

./quotetester.sh "hello world" 
“hello world”作为单个参数传递给Java。你也可以使用

./quotetester.sh hello\ world 

同样的效果。

因为壳不是这样工作的。如果您希望这是一个参数,那么它需要被引用/转义可能与在参数周围使用引号重复如何?
./quotetester.sh hello\ world