[英]cmd- comma to separate parameters Compared to space?
在分隔参数时,我对这个主题有一些疑问,比较空格的逗号。
他们是熟悉cmd提示符的C程序员的问题,可能会对它们有所了解。
我知道这样做的时候
c:\>program a b c
有4个参数[0]=program
[1]=a
[2]=b
[3]=c
根据hh ntcmds.chm
概念..
壳概述
; and , are used to separate parameters
; or , command1 parameter1;parameter2 Use to separate command parameters.
我看到dir a,b
给出与dir ab
相同的结果
但
c:\\>program a,b,c
给出参数[0] =程序[1] = a,b,c
一些人呢? 还是所有? windows命令使用; 而且,? 并且是在每个命令的代码中解释,还是像shell一样用空间完成?
如果它在每个命令的代码中......我怎么知道它做了什么? 我注意到explorer.exe的文档提到了逗号,例如你可以做explorer /e,.
但是DIR /? 没有提到它,但可以使用它。 并且一个典型的c程序根本不作为分隔符。所以shell不使用逗号分隔,它使用空格。 和windows命令一样,这样做是因为它们(全部?)被写入来分隔shell在使用逗号时进一步给出的参数?
Unix和Windows之间存在两个不同之处:
DIR
内置于shell中; 他们的命令行语法不必遵循与常规程序相同的规则 使用Visual Studio构建的Windows C程序使用Microsoft C运行时中的命令行解析器,类似于典型的Unix shell解析器并遵循空格和引号。
我从未见过使用过的C程序,
或者;
作为命令行分隔符。 我知道explorer /e,.
的特殊情况explorer /e,.
,但直到现在我才见过dir a,b
例子。
批处理文件使用逗号或分号作为备用参数分隔符。
测试批处理文件:
@echo %1/%2/%3
测试运行:
> test.cmd 1,2,3
1/2/3
> test.cmd 1;2 3
1/2/3
并且,正如您所注意到的, dir
使用它,也可以copy
- 这些都是shell内置函数,并且可能也像批处理文件一样运行类似的解析器(它不完全相同,因为您可以执行像cd..
这样的操作cd..
或dir/s
这是不可能为别的)。 我猜(注意:推测)这是某种向后兼容性,可以追溯到DOS甚至CP / M天。 现在你可能应该只使用空格。 正如Tim所说,C运行时决定了有关参数的某些内容以及它们应该如何被解析。 许多其他语言/框架遵循该惯例,但不一定全部。 例如,PowerShell具有完全不同的参数处理,当与其中的本机程序交互时,这有时会令人惊讶(可以说,PowerShell cmdlet和函数不是其他地方可执行的程序,同样也是批处理文件)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.