При внедрении флагов командной строки, должен ли я префикс 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.