Ruby oneliner的正则表达式块中的单引号问题

时间:2014-01-18 06:54:36

标签: bash

我今天用Ruby,单引号和双引号打了一个又一个问题。

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

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

它的工作正常,直到我的$ line包含单引号,例如

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

我试图将单引号转移到以下但没有运气。

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

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

1 个答案:

答案 0 :(得分:3)

问题与Ruby无关。问题是bash(因为错误信息明白告诉你)。

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

ruby 
-e 
'thing in single quotes'
${file}

单引号内的单词内容不能单引号。期。没有“逃避”你的出路。 (Ruby已经在单引号字符串中转义了单引号。但是你没有编写Ruby。你正在编写一个shell命令。)

要知道是这样,请尝试在命令行说

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

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

考虑双引用该表达式。还要考虑学习命令行和引用规则。或者如何编写和运行ruby 脚本,从而防止必须同时用两种语言编写?