Ruby oneliner 的正则表达式块中的单引号问题[重复]

Posted

技术标签:

【中文标题】Ruby oneliner 的正则表达式块中的单引号问题[重复]【英文标题】:Issue with single quote within Ruby oneliner's regular expression block [duplicate] 【发布时间】:2014-02-07 16:20:08 【问题描述】:

我今天用 Ruby、单引号和双引号解决了一个又一个问题。

我有这个 Ruby oneliner,用于检测文件中是否存在多行字符串。

ruby -e 'exit(gets(nil) =~ %r$line ? 0 : 1)' $file

在我的 $line 包含单引号之前,它可以正常工作,例如

ruby -e 'exit(gets(nil) =~ %rThis is David's car\nMazda 3\n ? 0 : 1)' /tmp/bug8164
-bash: syntax error near unexpected token `)'

我试图将单引号转义为以下内容,但没有成功。

ruby -e 'exit(gets(nil) =~ %rThis is David\'s car\nMazda 3\n ? 0 : 1)' /tmp/bug8164
-bash: syntax error near unexpected token `)'

有什么想法或想法吗?谢谢

【问题讨论】:

根本不是红宝石问题。 【参考方案1】:

这个问题与 Ruby 无关。问题是 bash (正如错误消息明确告知您的那样)。

命令行上的所有内容都必须是一个“单词”(我不确定它的术语是什么)。你的话是

ruby 
-e 
'thing in single quotes'
$file

您不能在单引号内的单引号内添加单引号。时期。没有“逃避”这条规则的方法。 (Ruby 在单引号字符串中转义了单引号。但您不是在编写 Ruby。您正在编写一个 shell 命令。)

要查看是这样,请尝试在命令行中说

$ echo 'exit(gets(nil) =~ %rThis is David's car\nMazda 3\n ? 0 : 1)'

即使故事中没有红宝石,您也会看到完全相同的错误。在单引号表达式中转义单引号将无济于事。

考虑双引号该表达式。还可以考虑学习命令行和引用规则。或者如何编写和运行一个 ruby​​ 脚本,从而避免同时用两种语言编写的混乱?

【讨论】:

以上是关于Ruby oneliner 的正则表达式块中的单引号问题[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Ruby:正则表达式中的十六进制

否定字符类中的单引号

使用正则表达式从 Ruby 中的字符串中提取子字符串

在文本块中获取相同的正则表达式组

ruby sidekiq_oneliners.rb

是否有 ruby​​ oneliner 可以在没有临时副本的情况下连接嵌套数组?