为什么 java 参数在 Windows 和 Linux 中表现不同?
Why java arguments behave differently in Windows and Linux?
我在 Windows cmd 和 wsl (ubuntu) 上测试一个简单的 java class 得到了不同的结果。
java class:
public class PrintArgs {
public static void main(String[] args) {
System.out.println("Printing some arguments in this code: ");
// Loop through arguments passed and print them to standard output
for (int i = 0; i < args.length; i++) {
System.out.println("Argument " + (i + 1) + ": " + args[i]);
}
}
}
我使用这个测试参数:
java PrintArgs.java Test "Testing TestThis" 'Some arguments' ´More Arguments´
在 cmd 中,单引号不对参数进行分组:
cmd results and java version
但在 ubuntu 中,它确实:
wsl results and java version
知道为什么会这样吗?
Java 进程已经得到一个字符串数组作为参数(在任何基于 C 的程序中,它更像是一个 **char
,但已经足够接近了)。它甚至 看不到 将单个参数组合在一起的引号,因为那些已经被 shell.
解释过
shell(可能是WSL中的Bash和window命令中的cmd.exe
)负责获取用户输入的单个连续字符串并拆分它变成参数(并在适用的情况下扩展通配符,但在这种情况下不会发生)。
现在 Bash 和 cmd.exe
关于引号的工作方式有不同的规则,所以他们以不同的方式拆分单个字符串。
我在 Windows cmd 和 wsl (ubuntu) 上测试一个简单的 java class 得到了不同的结果。
java class:
public class PrintArgs {
public static void main(String[] args) {
System.out.println("Printing some arguments in this code: ");
// Loop through arguments passed and print them to standard output
for (int i = 0; i < args.length; i++) {
System.out.println("Argument " + (i + 1) + ": " + args[i]);
}
}
}
我使用这个测试参数:
java PrintArgs.java Test "Testing TestThis" 'Some arguments' ´More Arguments´
在 cmd 中,单引号不对参数进行分组: cmd results and java version
但在 ubuntu 中,它确实: wsl results and java version
知道为什么会这样吗?
Java 进程已经得到一个字符串数组作为参数(在任何基于 C 的程序中,它更像是一个 **char
,但已经足够接近了)。它甚至 看不到 将单个参数组合在一起的引号,因为那些已经被 shell.
shell(可能是WSL中的Bash和window命令中的cmd.exe
)负责获取用户输入的单个连续字符串并拆分它变成参数(并在适用的情况下扩展通配符,但在这种情况下不会发生)。
现在 Bash 和 cmd.exe
关于引号的工作方式有不同的规则,所以他们以不同的方式拆分单个字符串。