Если у вас есть реализация Gnu getopt
, она сделает все это за вас.
Стандарт Posix getopt
прекращает обработку опций, когда достигает первого аргумента, не являющегося опцией,Это соответствует правилам Posix для разбора служебных аргументов, и многие из нас предпочитают такое поведение.Но другим нравится возможность смешивать опции и не опции, и это является нормой для утилит Gnu, если вы не установите переменную среды с неловким именем POSIXLY_CORRECT
.
В соответствии с этим предпочтением Gnu getopt
анализируетАргументы:
По умолчанию переставляется содержимое argv при сканировании, чтобы в конце концов все неопции были в конце.Это позволяет задавать параметры в любом порядке, даже если программы не были написаны, чтобы ожидать этого.
Обратите внимание на формулировку о перестановке аргументов.Это означает, что если вы начнете с
ls somefile -lt anotherFile
Gnu getopt
будет:
- Сообщить о
l
- Сообщить о
t
Сообщите об окончании опций (-1), оставив optind
со значением 2 и argv
, теперь выглядит так:
ls -lt somefile anotherFile
Так что теперь вы можетеобработайте ваши неопционные аргументы с помощью:
for (int argno = optind; argno < argc; ++argno) {
/* Do something with argv[argno] */
}
Кроме того, вы можете указать, сколько неопционных аргументов вы получили с помощью argc-optind
, и если argc == optind
, вы знаете, что их не было.
Разделение -lt
на два варианта является стандартным Posix getopt behaviour
.Вы можете комбинировать параметры lime, если первый не принимает аргумент.