Какова стандартная практика для того, чтобы команды rm -rf "file", rm -fr "file" и rm "file" -rf работали как допустимые команды?
Aмногие люди не согласны с этим, поэтому, похоже, нет стандартной практики, если только вы не нацелены на определенную аудиторию (то есть, когда пишете инструмент командной строки для linux, посмотрите, что делают «стандартные» утилиты).
В любом случае большинство библиотек в конечном итоге предоставляют вам следующие параметры:
- Переключатели : эти изолированные флаги в том, что после переключателя не ожидается никаких аргументов.Инструменты Unix, такие как
tar
и rm
, часто позволяют вам указывать несколько флагов вместе, как в -rf
флажках вашего примера. - Опции : они указаны как переключатели, но ожидаюткакое-то значение после переключения.Например,
gcc
ожидает имя выходного файла после -o
.Поскольку они ожидают параметры, они, очевидно, могут не указываться одновременно. - Короткие длинные имена VS : у переключателей и параметров обычно есть два имени: однозначное, однозначное или двойное описательное имя (сравните
-o
и --output-file
), хотя некоторые параметры, такие как справка или контроль многословия, часто имеют только длинное имя. - Несколько конечных аргументов : если инструмент позволяет обрабатывать одновременнофайлы сразу, все они указаны в end только последовательности.Разрешение их чередования с другими параметрами и флагами приведет к кошмару.Опция
--
для обозначения «конца опций» также удобна в том случае, если некоторые из этих конечных аргументов могут содержать тире.
Множество инструментов позволяют чередовать переключатели и опции, но множественные трейлингаргументы всегда в конце.
Конечно, вы найдете часто используемые инструменты, которые не соответствуют этим соглашениям, такие как cl.exe
и link.exe
от Microsoft.Более современные инструменты, похоже, сходятся к этому, в том числе candle.exe
и light.exe
от Microsoft для WIX.
Если вы хотите убедиться, что соблюдаете эти рекомендации (и сэкономите много времени), используйте "стандартную библиотеку, такую как UNIX getopt()
или опции программы boost.
Edit : существующие библиотеки часто генерируют опцию --help
для вас, используя краткие описания, которые вы даете, когда задаетепереключатели и опции, которые вы ожидаете.