在实现命令行标志时,我应该使用正斜杠 (/) 还是连字符 (-) 作为前缀?
Posted
技术标签:
【中文标题】在实现命令行标志时,我应该使用正斜杠 (/) 还是连字符 (-) 作为前缀?【英文标题】:When implementing command line flags, should I prefix with a fowardslash (/) or hyphen (-)? 【发布时间】:2013-03-18 23:31:18 【问题描述】:在阅读参数/标志时,他们是否有任何约定(书面或一般理解)何时使用 正斜杠 (/) 或 连字符 (-)从命令行?
C:\> myprogram.exe -a
C:\> myprogram.exe /a
根据我的经验,这两者似乎可以互换,但我没有使用足够多的命令行工具来说明我发现了任何规则或模式。
是否有充分的理由使用它们中的任何一个?如果我愿意,理论上可以使用星号 (*)吗?
【问题讨论】:
两者都应该可以正常工作。你可以注入你的自定义处理来解析你的参数。 在 Windows 上,您可以使用 /args。在 Unix、Linux 和 Windows 上,您应该使用 -x 表示单字母参数,使用 --xyz-abc 表示多字母参数。 Windows 中没有硬性规定,但-
在文件名中是完全合法的,而 /
则不是。因此 -option 可能是文件名,但 /option 不是。阿斯特里克斯是一个漫画人物。 *
是星号。
@PeterWright 哈哈哈,我认为这里的任何人都不会愚蠢到在这种情况下将两者混淆..但是感谢您指出文件名:)
【参考方案1】:
约定是:
-
用于单字母标志,它们可以链接起来(例如:rm -Rf
与 rm -R -f
相同)
--
用于带有多个字母的标志(例如:rm --recursive --force
)
使用/
是Windows继承DOS的旧标准,DOS从CP/M继承而来,新软件不宜使用。它在非 Windows 系统上和对读者造成歧义。 .NET 和 PowerShell 等现代 Microsoft 工具使用 -
作为标志,因此即使是 Microsoft 也不想再使用 /
。
【讨论】:
【参考方案2】:旧的 DOS 命令使用前缀 / 作为可选参数。 Microsoft 现在正朝着支持 Posix 使用 - 表示参数的方向发展,如其 PowerShell 命令行标准文档中所述。这是因为他们的操作系统现在将 \ 和 / 都视为目录分隔符。
https://technet.microsoft.com/en-us/library/ee156811.aspx
【讨论】:
【参考方案3】:你可以(理论上)使用你想要的任何东西,因为参数只是传递给你的命令行程序的字符串。
Windows 约定似乎更喜欢使用正斜杠 ipconfig /all
,尽管有些程序采用连字符 gacutil -i
甚至是某种环境变量语法 setup SKUUPGRADE=1
。
*Nix 约定似乎更喜欢将连字符 -v
用于单字母参数,将双连字符 --verbose
用于多字母参数。
我更喜欢连字符,因为它们与操作系统无关(正斜杠在某些操作系统中是路径分隔符),并且用于更现代的 Windows 应用程序(例如 nuget)。
编辑:
这是推荐一个执行 .NET 命令行参数解析的库的好地方:http://commandline.codeplex.com/
【讨论】:
【参考方案4】:另见Command line options style - POSIX or what?。
DOS 和 Windows 中的传统是使用正斜杠,如 /a
或 /extend
。使用 -a
的传统来自 Unix(可能还有其他地方)。
有一个GNU standard,其中一个破折号用于单字母标志,例如-e -d
,它们可以合并到-ed
(所以-ed
相当于-e -d
)。然后多字母开关需要两个破折号,如--extend --display
。有时只需要写出足够多的单词即可推断出 switch 的含义,例如,如果没有其他 switch 以字母 disp...
开头,--disp
可能是 --display
的缩写。
【讨论】:
+1 用于提及双破折号背后的原因。我没有意识到带有单个破折号的多个字母 (-ed
) 应该被视为多个单字母开关。
Mercurial 的 hg 虽然完全不同,因为它不需要斜线或斜线,但相似之处在于您只需要输入足够多的字符即可清楚地识别您想要的内容(例如“hg st”)
【参考方案5】:
前导正斜杠 (/) 在 Windows 应用程序中很常见。在符合 POSIX 的应用程序中,单连字符 (-) 通常用于短选项(由单个字母组成的选项)。双连字符 (--) 在此类应用程序中对于长选项很常见。
See this link for POSIX info.Or, see this SO post.
【讨论】:
【参考方案6】:通常在 Windows 上为 /
,在 Unix 系统上为 -
/--
用于短/长选项。但这并没有规定,所以这实际上取决于你。
【讨论】:
【参考方案7】:你可以使用任何你想要的,或者根本不用主角。更重要的是遵守标准。当其他用户使用您的应用程序时,他们会认为在添加参数时包含 - 或 /,因为这是他们的习惯。
【讨论】:
以上是关于在实现命令行标志时,我应该使用正斜杠 (/) 还是连字符 (-) 作为前缀?的主要内容,如果未能解决你的问题,请参考以下文章