与C#的此线程类似,我需要拆分包含程序命令行参数的字符串,以便用户可以轻松运行多个命令。例如,我可能有以下字符串:
-p /path -d "here's my description" --verbose other args
鉴于上述情况,Java通常会将以下内容传递给main函数:
Array[0] = -p
Array[1] = /path
Array[2] = -d
Array[3] = here's my description
Array[4] = --verbose
Array[5] = other
Array[6] = args
我不需要担心任何shell扩展,但它必须足够智能,能处理字符串中可能存在的单引号、双引号和转义字符。有人知道如何在这些条件下解析字符串以模拟shell吗?
注意:我不需要进行命令行解析,我已经在使用joptsimple进行解析。相反,我想让我的程序易于脚本化。例如,我希望用户能够在单个文件中放置一组命令,每个命令都可以在命令行上有效。例如,他们可以在文件中输入以下内容:
--addUser admin --password Admin --roles administrator,editor,reviewer,auditor
--addUser editor --password Editor --roles editor
--addUser reviewer --password Reviewer --roles reviewer
--addUser auditor --password Auditor --roles auditor
然后用户将按以下方式运行我的管理员工具:
adminTool --script /path/to/above/file
main()
函数将查找--script
选项并迭代文件中的不同行,将每一行分割成一个数组,然后将其发送到joptsimple实例,该实例将传递到我的应用程序驱动程序。
joptsimple带有一个解析器,其中包含一个parse方法,但它仅支持String
数组。 同样,GetOpt构造函数也需要一个String[]
- 因此需要一个解析器。