我有一个erb脚本:
<% foo="second" %>
first <%= foo %> third
当我使用erb
命令运行它时,它会在输出中放置一个前导空行:
% erb junk
first second third
但是当我在第一行中将结束%>
更改为-%>
时,除非我使用erb -T -
,否则脚本会失败:
~$ erb junk1
/usr/share/ruby/erb.rb:850:in `eval': junk1:1: syntax error, unexpected ';' (SyntaxError)
_erbout = ''; foo="second" -; _erbout.concat "\n"
^
from /usr/share/ruby/erb.rb:850:in `result'
from /usr/share/ruby/erb.rb:832:in `run'
from /bin/erb:133:in `run'
from /bin/erb:154:in `<main>'
$ erb -T - junk1
first second third
我认为-%>
应该始终被识别为跳过尾随换行符的标记。我正在测试这些模板与Puppet一起使用,所以我假设Puppet会识别-%>
标签,而这个funkiness只是erb命令的一部分。
答案 0 :(得分:0)
为了启用trim_mode
(-%>
),您必须使用trim模式参数实例化ERB
对象,例如:
e = ERB.new(str, nil, '-')
请注意,Rails
默认情况下不使用stdlib&#39; ERB
,而是使用erubis
。有关此功能的文档可以在Section 6.3 here:
自2.6.0以来,&#39;&lt;%= - %&gt;&#39;删除尾部空格和换行符。当修剪模式为&#39;时,这与ERB相容。 &#39;&lt;%= =%&gt;&#39;还删除了尾部空格和换行符,这是Erubis原始的增强功能(比#&lt;&lt;%= - %&gt;&#39;更冷,&#39;,不是吗?)。
有关详细信息,请参阅ERB
documentation。另请注意,如果您在-%>
之后有任何培训空间,则可能导致 的换行符被裁减。