Java 命令行参数中包含空格时出现问题
我有一个Java程序,我正在Linux环境中通过bash脚本执行它 这是我的简单bash脚本,它接受一个字符串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];
#!/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