在实现命令行标志时,我应该使用fowardslash(/)或连字符( - )作为前缀吗?

Con*_*ell 11 c# command-line console-application command-line-arguments

当从命令行读取参数/标志时,是否使用正斜杠(/)或连字符( - )的任何约定(无论是书面的还是通常理解的)?

C:\> myprogram.exe -a
C:\> myprogram.exe /a
Run Code Online (Sandbox Code Playgroud)

根据我的经验,这两个似乎是可以互换的,但是我没有使用足够的命令行工具来说我发现了任何规则或模式.

他们中的任何一个都被使用了吗?如果我愿意,理论上我可以使用星号(*)吗?

ken*_*ken 11

您可以(理论上)使用您想要的任何内容,因为参数只是传递给命令行程序的字符串.

Windows约定似乎更喜欢使用正斜杠ipconfig /all,但有一些需要连字符的程序gacutil -i,甚至是排序的环境变量语法setup SKUUPGRADE=1.

*Nix约定似乎更喜欢-v单字母参数的连字符,以及--verbose多字母参数的双连字符.

我倾向于使用连字符,因为它们更多与操作系统无关(正斜杠是某些操作系统中的路径分隔符),并且在更现代的Windows应用程序中使用(例如,nuget).

编辑:

这将是推荐一个执行.NET命令行参数解析的库的好地方:http://commandline.codeplex.com/


Tho*_*mar 5

通常它/在 Windows 和-/--在 Unix 系统上用于短/长选项。但是没有规则,所以这实际上取决于你。


Jep*_*sen 5

另请参阅命令行选项样式-POSIX或什么?

DOS和Windows中的传统是使用正斜杠,如/a或中的/extend。使用的传统-a来自Unix(可能还有其他地方)。

有一个GNU标准,其中单个破折号用于一个字母标志,例如-e -d,并且可以将它们合并为-ed(因此-ed等效于-e -d)。然后,多字母开关需要两个破折号,如中所示--extend --display。有时只需要写足够多的单词就可以推断出开关的含义,因此例如--disp--display如果没有其他开关以字母开头,则可能是一个短记号disp...


Chr*_* C. 5

旧的 DOS 命令使用前缀 / 作为可选参数。Microsoft 现在正致力于支持 Posix 使用 - 来表示其 PowerShell 命令行标准文档中记录的参数。这是因为他们的操作系统现在将 \ 和 / 视为目录分隔符。

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