该命令
perl -ne "print "" """ AnyTextFile.txt在安装了最新ActivePerl (5.020)的Windows上运行时会报告Can't find string terminator '"' anywhere before EOF at -e line 1.。其他字符或变量按预期工作,如
perl -ne "print ""$.-$_""" AnyTextFile.txt我检查了双引号是否按预期传递给了perl,尽管在cmd.exe中转义双引号有点奇怪。为什么在上面的双引号字符串中不能显示空格?使用单引号可以工作,但它失去了变量插值功能。
发布于 2014-11-27 18:37:00
perl -ne "print \" \"" AnyTextFile.txt为什么?
许多程序通过C库使用的标准参数解析器来获取参数,该解析器最初用于编译语言本身、其库或用作基础。
对于windows,通常,"rules" for argument parsing是
参数由空格分隔,空格可以是空格或制表符。
用双引号括起来的字符串被解释为单个参数,而不考虑其中包含的空格。带引号的字符串可以嵌入到参数中。请注意,插入符号(^)不被识别为转义字符或分隔符。
前面有反斜杠\“的双引号被解释为文字双引号(")。
反斜杠是按字面解释的,除非它们紧跟在双引号之前。
如果一个偶数个反斜杠后面跟着一个双引号,那么对于每对反斜杠(),都会在argv数组中放置一个反斜杠(),并且双引号(")被解释为字符串分隔符。
如果奇数个反斜杠后面跟一个双引号,则每对反斜杠()都会在argv数组中放置一个反斜杠(),并且剩余的反斜杠会将双引号解释为转义序列,从而导致在argv中放置一个原义双引号(")。
https://stackoverflow.com/questions/27165997
复制相似问题