谁能解释我JVM如何精确地从命令行解析字符串/参数并从中创建字符串数组(String [] args)?如果可能的话,我实际上想看一下代码。
比方说,我有一个从命令行获取输入的已编译Java程序:
$ java Test Hi, now you "parse me" ""plea"se
它使用以下值创建数组:
args[0] = Hi,
args[1] = now
args[2] = you
args[3] = parse me
args[4] = please
我假设命令行中的文本作为String传递给JVM,然后JVM根据一些规则拆分字符串并从中创建String []数组。
通过观察,我的观察方式是这样的:
除非空格位于一对双引号"
之间,否则它将使用空格分隔符从命令行中分隔整个输入字符串。它认为双引号"
和\
是特殊字符,与bash相同,并且与bash完全相同。因此,只要找到"
,它就会尝试将其与另一个"
匹配,并且双引号对之间的所有内容都被视为一个字符串,除非它被\
所转义。