Java中main函数的args拆分规则?

时间:2014-10-10 07:00:13

标签: java args

我遇到了一个奇怪的问题:

我创建了一个程序来打印所有收到的args,这是代码:

public class Test {
    public static void main(String[] args) {
        for (int i = 0; i < args.length; i ++) {
            System.out.println(args[i]);
        }
    }
}   

然后我构建了一个jar文件并运行以下命令:

java -jar test.jar test&1    

但是,它没有按预期打印“test&amp; 1”。结果是:

test
'1'is not recognized as an internal or external command,operable program or batch file.    

所以我的问题是:args的分离是什么?如果我真的需要接收“test&amp; 1”,我该怎么办?

谢谢!

1 个答案:

答案 0 :(得分:3)

这与Java无关。 &字符对于Windows shell 是特殊的(我可以从错误消息中告诉它是Windows):它在一行上分隔两个命令,所以你要做的就是告诉shell运行java -jar test.jar test然后运行1。如果要将test&1传递给Java,则必须将其放在引号中:

java -jar test.jar "test&1"

&在* nix shell上也很特殊(但是以不同的方式,它在子shell中运行命令)。在那里,您可以使用上面的引号,或者在\之前添加&。但不是在Windows上。