Windows上的Perl在一行程序模式下不能包含字符串空间?

时间:2014-11-27 08:18:54

标签: perl cmd activeperl

命令

perl -ne "print "" """ AnyTextFile.txt

在安装了最新ActivePerl的Windows上运行(5.020)会抱怨Can't find string terminator '"' anywhere before EOF at -e line 1.。其他字符或变量按预期工作,如

perl -ne "print ""$.-$_""" AnyTextFile.txt

我检查了双引号是否按预期传递给perl,即使在cmd.exe中转义双引号时有点奇怪。为什么空间不能显示在上面的双引号字符串中?使用单引号可以工作,但它会丢失变量插值功能。

1 个答案:

答案 0 :(得分:2)

perl -ne "print \" \"" AnyTextFile.txt

为什么?

许多程序通过最初用于编译语言本身,其库或用作基础的C库使用的标准参数解析器来获取其参数。

对于Windows,一般来说,"rules" for argument parsing

  

参数由空格分隔,可以是空格或制表符。

     

由双引号括起来的字符串被解释为a   单个参数,不管其中包含的空格。引用   string可以嵌入到参数中。请注意,插入符号(^)不是   被认为是逃脱角色或分隔符。

     

以反斜杠开头的双引号,“,”被解释为   文字双引号(“)。

     

反斜杠按字面解释,除非它们紧接在前面   双引号。

     

如果偶数个反斜杠后跟双引号   mark,然后将一个反斜杠()放在argv数组中   一对反斜杠(\),双引号(“)是   解释为字符串分隔符。

     

如果奇数个反斜杠后跟双引号   mark,然后将一个反斜杠()放在argv数组中   一对反斜杠(\)和双引号被解释   作为剩余反斜杠的转义序列,导致文字   双引号(“)放在argv中。