从命令行读取参数/标志时,他们是否有任何约定(书面或一般理解)何时使用正斜杠(/)或连字符(-)?
C:\> myprogram.exe -a
C:\> myprogram.exe /a
根据我的经验,这两者似乎可以互换,但我没有使用足够的命令行工具来说明我发现了任何规则或模式。
是否有充分的理由使用它们中的任何一个?如果我愿意,理论上可以使用星号(*) 吗?
从命令行读取参数/标志时,他们是否有任何约定(书面或一般理解)何时使用正斜杠(/)或连字符(-)?
C:\> myprogram.exe -a
C:\> myprogram.exe /a
根据我的经验,这两者似乎可以互换,但我没有使用足够的命令行工具来说明我发现了任何规则或模式。
是否有充分的理由使用它们中的任何一个?如果我愿意,理论上可以使用星号(*) 吗?
你可以(理论上)使用你想要的任何东西,因为参数只是传递给你的命令行程序的字符串。
Windows 约定似乎更喜欢使用正斜杠ipconfig /all
,尽管有些程序采用连字符gacutil -i
甚至是某种环境变量语法setup SKUUPGRADE=1
。
*Nix 约定似乎更喜欢-v
单字母参数的连字符--verbose
和多字母参数的双连字符。
我倾向于更喜欢连字符,因为它们与操作系统无关(正斜杠在某些操作系统中是路径分隔符)并且用于更现代的 Windows 应用程序(例如 nuget)。
编辑:
这将是推荐一个执行 .NET 命令行参数解析的库的好地方:http: //commandline.codeplex.com/
DOS 和 Windows 中的传统是使用正斜杠,如/a
or /extend
。使用的传统-a
来自 Unix(也可能来自其他地方)。
有一个GNU 标准,其中单个破折号用于单字母标志,例如-e -d
,并且它们可以合并到-ed
(因此-ed
等同于-e -d
)。然后多字母开关需要两个破折号,如--extend --display
. 有时只需要写出足以推断出 switch 含义的单词,例如,如果没有其他 switch 以字母开头,则--disp
可能是缩写。--display
disp...
通常它/
在 Windows 和-
/--
在 Unix 系统上用于短/长选项。但这没有规定,所以这实际上取决于你。
旧的 DOS 命令使用前缀 / 作为可选参数。Microsoft 现在正朝着支持 Posix 使用 - 表示参数的方向发展,如其 PowerShell 命令行标准文档中所述。这是因为他们的操作系统现在将 \ 和 / 都视为目录分隔符。
你可以使用任何你想要的东西,或者根本不用主角。更重要的是遵守标准。当其他用户使用您的应用程序时,他们会认为在添加参数时包含 - 或 /,因为这是他们习惯的做法。
前导正斜杠 (/) 在 Windows 应用程序中很常见。在符合 POSIX 标准的应用程序中,单连字符 (-) 通常用于短选项(由单个字母组成的选项)。对于此类应用程序中的长选项,双连字符 (--) 很常见。
约定是:
-
对于单字母标志,它们可以链接起来(例如:rm -Rf
与 相同rm -R -f
)
--
对于具有多个字母的标志(例如rm --recursive --force
:)
Using/
是 Windows 继承 DOS 的旧标准,DOS 继承自 CP/M,不宜用于新软件。它在非 Windows 系统上和对读者造成歧义。.NET 和 PowerShell 等现代 Microsoft 工具-
用于标志,因此即使是 Microsoft 也不想再使用/
了。