命令
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中转义双引号时有点奇怪。为什么空间不能显示在上面的双引号字符串中?使用单引号可以工作,但它会丢失变量插值功能。
答案 0 :(得分:2)
perl -ne "print \" \"" AnyTextFile.txt
为什么?
许多程序通过最初用于编译语言本身,其库或用作基础的C库使用的标准参数解析器来获取其参数。
对于Windows,一般来说,"rules" for argument parsing是
参数由空格分隔,可以是空格或制表符。
由双引号括起来的字符串被解释为a 单个参数,不管其中包含的空格。引用 string可以嵌入到参数中。请注意,插入符号(^)不是 被认为是逃脱角色或分隔符。
以反斜杠开头的双引号,“,”被解释为 文字双引号(“)。
反斜杠按字面解释,除非它们紧接在前面 双引号。
如果偶数个反斜杠后跟双引号 mark,然后将一个反斜杠()放在argv数组中 一对反斜杠(\),双引号(“)是 解释为字符串分隔符。
如果奇数个反斜杠后跟双引号 mark,然后将一个反斜杠()放在argv数组中 一对反斜杠(\)和双引号被解释 作为剩余反斜杠的转义序列,导致文字 双引号(“)放在argv中。