我有一个包含替换变量(#{...}
)的文件,我想将其复制到另一个文件中,变量用其值替换。
这就是我所拥有的
file = File.open(@batch_file_name, "w+")
script=File.open("/runBatch.script","r")
script.each do |line|
file.puts(line)
end
但这显然不是正确的方法。有什么建议吗?
答案 0 :(得分:3)
而不是文件中的#{...}
使用ERB文件。
答案 1 :(得分:1)
不,这不是正确的方法。你不能指望Ruby神奇地将它在数据中遇到的任何#{}
解释为变量插值。这会(除了其他可怕的副作用)在任何地方产生大量的安全问题。
如果你想将数据插入到一个字符串中,你需要eval
它,它有自己的安全风险:
str = 'The value of x is #{x}'
puts str # The value of x is #{x}
x = "123"
puts eval "\"#{str}\"" # Thje value of x is 123
您正在尝试将哪些变量插入到数据中并不清楚。这几乎肯定是采取任何行动的错误方式。
答案 2 :(得分:1)
好的说你有一个名为tmp.file的文件,其中包含以下文字:
This is #{foobar}!
然后您可以轻松执行以下操作:
str = ""
File.open("tmp.file", "r") do |f|
str = f.read
end
abc = "Sparta"
puts eval('"' + str + '"')
您的结果将是This is Sparta!
但正如已经建议的那样,你应该选择像ERB这样的真实模板解决方案。然后你会像Rails中的视图一样使用你的文件。而不是This is #{foobar}.
,您将拥有This is <%= foobar %>.