Ruby正在返回实际换行而不是\ n

时间:2015-09-28 20:54:48

标签: ruby

我有一个文件"Foo.md",其中包含三行:

Foo

Bar

我希望File.read("Foo.md")返回"Foo\n\nBar"当我从终端中的irb运行它时会执行此操作,但是当我从诸如

之类的脚本运行它时
content = File.read('Foo.md')
puts content

返回时将转换为实际返回的行。我需要将该变量作为我的脚本中接下来的单行。

要明确:我不想改变行数,只是调试以确保变量content作为单行传递。

3 个答案:

答案 0 :(得分:3)

您仍在阅读"Foo\n\n\nBar"。但是,puts会解释特殊字符。

您可以使用String#inspect

puts content.inspect # => "Foo\n\n\nBar"

答案 1 :(得分:1)

str =
"Foo


Bar"
  #=> "Foo\n\n\nBar"

你也可以这样做:

str.gsub(/\n{3,}/,"\n\n")
  #=> "Foo\\nnBar" 

答案 2 :(得分:1)

通过冥想可以帮助您想象正在发生的事情:

str = <<EOT
Foo


Bar
EOT

str的内容如下:

str # => "Foo\n\n\nBar\n"

检查它是否以反射方式表示,但是在创建带有嵌入式行尾的字符串时,它是 NOT 您想要使用的内容。你想要如上所示定义它。

str.inspect # => "\"Foo\\n\\n\\nBar\\n\""
在IRB和控制台中查看时,

inspect输出会有所不同。这是你在控制台中看到的内容:

ruby -e 'puts "\n"; puts "\n".inspect'

"\n"

str打印到控制台:

puts str
# >> Foo
# >> 
# >> 
# >> Bar