如何逃避ERB中的“@”字符?

时间:2018-03-01 11:14:27

标签: ruby string erb

我正在使用一个生成一个Perl应答文件 Embedded Ruby code (ERB)模板。此答案文件包含变量,然后用于以静默方式调用安装程序。

我无法控制安装程序代码;我掌握的是答案文件。

如果字符串包含未转义的元字符,安装程序会抛出预期的警告。

我希望答案文件包含一个包含转义字符的Perl字符串常量。该值使用嵌入式Ruby代码提供。

我有两个变量。一个在Ruby中定义,另一个在Perl中定义。

my $variable = <%= [@var].flatten %>;

$variable在Perl中,@var是Ruby。

@var将包含电子邮件地址。

@var = "abcd@gmail.com"

我想要转义at @字符以便Perl 不认为@gmail是变量。

简而言之,我想将"abcd\@gmail.com"写入答案文件。

我尝试了多项但是徒劳无功。

@var = "abcd@gmail.com"
@var.gsub("@", "\@") # => "abcd@gmail.com"
@var.gsub("@", "\\@") # => "abcd\\@gmail.com"
@var.gsub("@", "\\\@") # => "abcd\\@gmail.com"

1 个答案:

答案 0 :(得分:4)

@var.gsub("@", "\\@")是正确的。 Ruby将结果表示为等效的双引号字符串,需要反斜杠转义

尝试puts @var