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 的正则表达式块中的单引号问题[重复]的主要内容,如果未能解决你的问题,请参考以下文章