为什么java参数在Windows和Linux中的行为不同?

为什么java参数在Windows和Linux中的行为不同?,java,cmd,windows-subsystem-for-linux,Java,Cmd,Windows Subsystem For Linux,我在WindowsCMD和wsl(ubuntu)上测试一个简单的java类时得到了不同的结果 java类: 公共类PrintArgs{ 公共静态void main(字符串[]args){ System.out.println(“打印此代码中的一些参数:”); //循环传递的参数并将其打印到标准输出 对于(int i=0;i

我在WindowsCMD和wsl(ubuntu)上测试一个简单的java类时得到了不同的结果

java类:

公共类PrintArgs{
公共静态void main(字符串[]args){
System.out.println(“打印此代码中的一些参数:”);
//循环传递的参数并将其打印到标准输出
对于(int i=0;i
我使用以下测试参数:

java PrintArgs.java Test“Testing TestThis”'一些参数''更多参数'
在cmd中,单引号不会对参数进行分组:

但在ubuntu中,它确实:


知道为什么会发生这种情况吗?

Java进程已经获得了一个字符串数组作为参数(在任何基于C的语言中,它更像是一个
**char
,但这已经足够接近了)。它甚至看不到将单个参数组合在一起的引号,因为shell已经解释了这些引号

shell(可能是WSL中的Bash和命令窗口中的
cmd.exe
)负责获取用户输入的单个连续字符串并将其拆分为参数(并在适用的情况下扩展通配符,但在这种情况下不会发生这种情况)


现在Bash和
cmd.exe对引号的工作方式有不同的规则,因此它们对单个字符串进行了不同的拆分。

这与Java无关。这是不同的命令shell解析命令行并将其分解为参数的方式。