При внедрении флагов командной строки, должен ли я префикс fowardslash (/) или дефис (-)?

Являются ли они любыми соглашениями (написанными или просто общеизвестными), когда следует использовать косую черту (/) или дефис (-) при чтении аргументов/флагов из командной строки?

C:\> myprogram.exe -a
C:\> myprogram.exe /a

Эти два, кажется, взаимозаменяемы в моем опыте, но я не использовал достаточно инструментов командной строки, чтобы сказать, что я заметил какие-либо правила или шаблоны.

Есть ли веская причина, что любой из них используется вообще? Могу ли я теоретически использовать звездочку (*), если захочу?

Ответ 1

Вы можете (теоретически) использовать все, что хотите, поскольку параметры - это просто строки, переданные вашей программе командной строки.

Соглашение Windows, похоже, предпочитает использование косой черты ipconfig /all, хотя существуют программы, которые принимают дефис gacutil -i или даже синтаксис переменной среды setup SKUUPGRADE=1.

* Соглашение Nix предпочитает дефис -v для однобуквенных параметров и двойной дефис --verbose для многобуквенных параметров.

Я предпочитаю дефисы, так как они больше OS-agnostic (прямая косая черта - это разделители путей в некоторых ОС) и используются в более современных приложениях Windows (например, nuget).

Edit:

Это было бы неплохо порекомендовать библиотеку, которая провела анализ аргументов командной строки .NET: http://commandline.codeplex.com/

Ответ 2

Обычно это / для Windows и -/-- для Unix-систем для коротких/длинных опций. Но для этого нет правила, так что это действительно зависит от вас.

Ответ 3

См. также Стиль опций командной строки - POSIX или что?.

Традиция в DOS и Windows заключается в использовании косой черты, как в /a или /extend. Традиция использования -a происходит от Unix (и, возможно, в другом месте).

Здесь стандарт GNU, в котором для однобуквенных флагов используется один тире, например -e -d, и их можно объединить в -ed (поэтому -ed эквивалентно -e -d). Затем многобуквенные переключатели нуждаются в двух тире, как в --extend --display. Иногда нужно просто написать столько же слова, сколько достаточно, чтобы вывести, что означает этот переключатель, так что например --disp может быть short-hadn для --display, если другой ключ не начинается с букв disp....

Ответ 4

В старых командах DOS использовались префикс/для необязательных параметров. В настоящее время Microsoft переходит к поддержке использования Posix - для обозначения параметров, описанных в их документации PowerShell Command Line. Это связано с тем, что их операционная система теперь видит символы\и/как разделители каталогов.

https://technet.microsoft.com/en-us/library/ee156811.aspx

Ответ 5

Вы можете использовать все, что хотите, или вообще не иметь никакого персонажа. Это больше связано с соблюдением стандартов, чем с чем-либо. Когда другие пользователи используют ваше приложение, они подумают о включении аргументов - или/при добавлении, потому что это то, к чему они привыкли.

Ответ 6

В приложениях Windows распространена ведущая справка (/). Отдельные дефисы (-) являются общими для коротких опций (состоящих из одной буквы) в приложениях, совместимых с POSIX. Двойные дефисы (-) являются общими для длинных опций в таких приложениях.

См. эту ссылку для информации POSIX. Или, см. это сообщение SO.