13

从命令行读取参数/标志时,他们是否有任何约定(书面或一般理解)何时使用正斜杠(/)或连字符(-)?

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

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

是否有充分的理由使用它们中的任何一个?如果我愿意,理论上可以使用星号(*) 吗?

4

7 回答 7

13

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

Windows 约定似乎更喜欢使用正斜杠ipconfig /all,尽管有些程序采用连字符gacutil -i甚至是某种环境变量语法setup SKUUPGRADE=1

*Nix 约定似乎更喜欢-v单字母参数的连字符--verbose和多字母参数的双连字符。

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

编辑:

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

于 2013-03-28T13:46:28.747 回答
6

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

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

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

于 2013-03-28T13:49:38.200 回答
5

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

于 2013-03-28T13:46:17.330 回答
5

旧的 DOS 命令使用前缀 / 作为可选参数。Microsoft 现在正朝着支持 Posix 使用 - 表示参数的方向发展,如其 PowerShell 命令行标准文档中所述。这是因为他们的操作系统现在将 \ 和 / 都视为目录分隔符。

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

于 2015-12-21T01:00:29.850 回答
0

你可以使用任何你想要的东西,或者根本不用主角。更重要的是遵守标准。当其他用户使用您的应用程序时,他们会认为在添加参数时包含 - 或 /,因为这是他们习惯的做法。

于 2013-03-28T13:42:24.440 回答
0

前导正斜杠 (/) 在 Windows 应用程序中很常见。在符合 POSIX 标准的应用程序中,单连字符 (-) 通常用于短选项(由单个字母组成的选项)。对于此类应用程序中的长选项,双连字符 (--) 很常见。

有关 POSIX 信息,请参阅此链接。 或者,请参阅此 SO 帖子。

于 2013-03-28T13:49:16.067 回答
0

约定是:

  • -对于单字母标志,它们可以链接起来(例如:rm -Rf与 相同rm -R -f

  • --对于具有多个字母的标志(例如rm --recursive --force:)

Using/是 Windows 继承 DOS 的旧标准,DOS 继承自 CP/M,不宜用于新软件。它在非 Windows 系统上和对读者造成歧义。.NET 和 PowerShell 等现代 Microsoft 工具-用于标志,因此即使是 Microsoft 也不想再使用/了。

于 2020-06-15T22:33:31.080 回答