Как и этот поток для С#, мне нужно разбить строку, содержащую аргументы командной строки, в мою программу, чтобы я мог позволить пользователям легко запускать несколько команд. Например, у меня может быть следующая строка:
-p /path -d "here my description" --verbose other args
Учитывая вышеизложенное, Java обычно передает следующее в main:
Array[0] = -p
Array[1] = /path
Array[2] = -d
Array[3] = here my description
Array[4] = --verbose
Array[5] = other
Array[6] = args
Мне не нужно беспокоиться о расширении оболочки, но она должна быть достаточно умной, чтобы обрабатывать одиночные и двойные кавычки и любые escape-последовательности, которые могут присутствовать в строке. Кто-нибудь знает способ разбора строки, поскольку оболочка будет в этих условиях?
ПРИМЕЧАНИЕ: мне нужно НЕ выполнить синтаксический анализ командной строки, я уже использую 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[]
- отсюда необходимость в синтаксическом анализаторе.