首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Windows上的Perl的单行编程模式下不能在字符串中包含空格吗?

问在Windows上的Perl的单行编程模式下不能在字符串中包含空格吗?
EN

Stack Overflow用户
提问于 2014-11-27 16:18:54
回答 1查看 68关注 0票数 0

该命令

代码语言:javascript
复制
perl -ne "print "" """ AnyTextFile.txt

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

代码语言:javascript
复制
perl -ne "print ""$.-$_""" AnyTextFile.txt

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

EN

回答 1

Stack Overflow用户

发布于 2014-11-27 18:37:00

代码语言:javascript
复制
perl -ne "print \" \"" AnyTextFile.txt

为什么?

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

对于windows,通常,"rules" for argument parsing是

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

用双引号括起来的字符串被解释为单个参数,而不考虑其中包含的空格。带引号的字符串可以嵌入到参数中。请注意,插入符号(^)不被识别为转义字符或分隔符。

前面有反斜杠\“的双引号被解释为文字双引号(")。

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

如果一个偶数个反斜杠后面跟着一个双引号,那么对于每对反斜杠(),都会在argv数组中放置一个反斜杠(),并且双引号(")被解释为字符串分隔符。

如果奇数个反斜杠后面跟一个双引号,则每对反斜杠()都会在argv数组中放置一个反斜杠(),并且剩余的反斜杠会将双引号解释为转义序列,从而导致在argv中放置一个原义双引号(")。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27165997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档