Java命令行参数中单、双引号处理空格的效果是否一致?
Java命令行参数:单引号与双引号处理空格的差异
首先要明确:Java本身并不负责解析命令行的引号,引号的解析是由你运行Java程序的**操作系统Shell(比如Linux的Bash、Windows的Cmd/PowerShell)**完成的,解析后的参数才会传递给Java程序的main方法。因此两者处理空格的效果是否相同,取决于你使用的Shell环境:
在Linux/macOS的Bash等类Unix Shell中
单引号和双引号处理空格的效果一致,都会将包裹的带空格内容识别为单个参数:
- 执行命令:
java MyApp 'i am a good boy',Java程序的args[0]会是i am a good boy(单引号不会被传递到参数里) - 执行命令:
java MyApp "i am a good boy",Java程序的args[0]同样是i am a good boy(双引号也不会被传递)
两者的区别仅在于对特殊字符的解析:单引号会完全忽略内部的特殊字符(比如$、\),而双引号会解析这些字符,但这和空格处理无关。
在Windows的Cmd环境中
单引号和双引号的处理效果完全不同:
- 双引号是Cmd认可的参数包裹符,执行
java MyApp "i am a good boy"时,args[0]会是i am a good boy,作为单个参数。 - 单引号在Cmd中只是普通字符,没有参数包裹的作用,执行
java MyApp 'i am a good boy'时,Cmd会按空格分割,最终Java程序会收到5个参数:'i、am、a、good、boy'。
总结
如果你的程序需要跨平台兼容,建议统一使用双引号来包裹带空格的命令行参数,因为双引号在绝大多数Shell环境中都能起到正确的参数包裹作用。
内容的提问来源于stack exchange,提问作者Md Azhar Uddin
相关产品推荐
相关产品推荐

