代码之家  ›  专栏  ›  技术社区  ›  barlop Sandeep

逗号分隔参数与空格比较?

  •  7
  • barlop Sandeep  · 技术社区  · 15 年前

    我有一些关于主题的问题,比如在界定参数时逗号与空格的比较。

    这些问题是C程序员熟悉的cmd提示,可能会打开一些灯。

    我知道在做的时候

    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 a b

    但是

    c:\>program a,b,c 给出参数[0]=程序[1]=A、B、C

    那就做点什么?还是全部?Windows命令使用;和,?这是每个命令的代码中的解释,还是由外壳像空间一样完成的?

    如果它在每个命令的代码中……我怎么知道是哪个做的? 我注意到explorer.exe文档中提到了逗号,例如 explorer /e,.

    但是dir/?不用说,但可以用。典型的C程序根本不把它作为分隔符。外壳不使用逗号来分隔的情况也是如此,它使用空格。和windows命令一样,因为它们(都是?)当使用逗号时,为分隔shell进一步给出的参数而编写的代码?

    2 回复  |  直到 12 年前
        1
  •  4
  •   Tim Robinson    15 年前

    Unix和Windows之间有两个不同之处:

    • 内部命令,如 DIR 是内置在shell中的;它们的命令行语法不必遵循与常规程序相同的规则
    • 在Windows上,程序负责解析自己的命令行。shell解析重定向和管道,然后将命令行的其余部分以一个字符串的形式传递给程序。

    使用Visual Studio生成的Windows C程序使用Microsoft C运行时中的命令行分析器,这类似于典型的Unix Shell分析器,并遵循空格和引号。

    我从未见过使用 , ; 作为命令行分隔符。我知道 explorer /e,. 但我从未见过 dir a,b 直到现在。

        2
  •  0
  •   Joey Gumbo    15 年前

    批处理文件使用逗号或分号作为可选参数分隔符。

    测试批处理文件:

    @echo %1/%2/%3
    

    试运行:

    > test.cmd 1,2,3
    1/2/3
    > test.cmd 1;2 3
    1/2/3
    

    正如你所指出的, dir 使用它, copy 另外,它们都是shell内置的,并且可能运行在类似于批处理文件的解析器中(它并不完全相同,因为您可以执行类似的操作 cd.. dir/s 这是不可能的。我猜(注意:推测)这是某种向后兼容性,可以追溯到DOS甚至CP/M时代。现在你可能应该只使用空间。正如蒂姆所指出的,C运行时规定了一些关于参数以及如何解析这些参数的事情。许多其他语言/框架都遵循该约定,但不一定全部遵循。例如,PowerShell具有完全不同的参数处理,当与来自它内部的本机程序进行交互时,这有时会令人惊讶(也就是说,PowerShell的Cmdlet和函数在其他地方不是可执行的程序,而是批处理文件)。