27383


## ソース

[code]

    print "aaaaaaa\
    bbbbbb"
    
[/code]

## 結果

[code]

    aaaaaaabbbbbb
    
[/code]

これは納得がいくのですが、

## ソース

[code]

    print "aaaaaaa\n
    bbbbbb"
    
[/code]

## 結果

[code]

    aaaaaaa
    
    bbbbbb
    
[/code]

は何故でしょうか？

[code]

    aaaaaaa
             #<= ここの行はなぜ出現？？
    bbbbbb
    
[/code]


CC BY-SA 3.0
2016-07-06T09:54:43.947
27379
2016-07-08T03:44:43.890
2016-07-08T03:44:43.890
5519
9008
question
ruby
printの出力結果が改行されるのはなぜでしょうか？


文字列の中で改行がされているからです。

## 例1

[code]

    print "aaaaaaa\
    bbbbbb"
    
[/code]

この例では、文字列の中で改行されていますが、`\`を使って行を継続させているので、

[code]

    aaaaaaabbbbbb
    
[/code]

このように、改行されずに出力されます。

## 例2

[code]

    print "aaaaaaa\n
    bbbbbb"
    
[/code]

この例では、改行を表す`\n`と文字列の中の改行がありますので、2回改行されます。

[code]

    aaaaaaa
    
    bbbbbb
    
[/code]

## 例3

[code]

    print "aaaaaaa\n\
    bbbbbb"
    
[/code]

この例では、`\n`で一度改行されていますが、文字列中の改行は`\`で継続させていますので、以下のように出力されます

[code]

    aaaaaaa
    bbbbbb
    
[/code]


CC BY-SA 3.0
2016-07-06T10:08:05.567
27381
2016-07-06T10:17:40.430
2016-07-06T10:17:40.430
10803
10803
27379
answer


`\n` は改行コード (0x0a) を表すバックスラッシュ記法です。  
ご質問の例だと `\n` の後ろに 改行コード (0x0a) が含まれています。  
結果、改行コードが2つ出力されるので 空の行が表示されます。

出力をダンプするとよく分かります。

[code]

    $ ruby -e 'print "aaaaaaa
    bbbbbb"' | od -c
    0000000   a   a   a   a   a   a   a  \n   b   b   b   b   b   b  ←改行が1つ出現
    0000016
    $ ruby -e 'print "aaaaaaa\n
    bbbbbb"' | od -c
    0000000   a   a   a   a   a   a   a  \n  \n   b   b   b   b   b   b  ←改行が2つ出現
    0000017
    
[/code]


CC BY-SA 3.0
2016-07-06T10:22:21.263
27382
2016-07-06T10:22:21.263
5008
27379
answer


[リテラル (Ruby 2.3.0)](http://docs.ruby-
lang.org/ja/2.3.0/doc/spec=2fliteral.html#string)には

> 複数行にわたって書くこともできます。 この場合含まれる改行文字は常に\nになります。

とあるので  
文字列中の改行 --> `\n` \--> `print`時に改行  
となり後者のような結果になります。また

> ダブルクォートで囲まれた文字列ではバックスラッシュ記法と式展開(後述)が有効になります。

及びバックスラッシュ記法として

> \改行
>
> 文字列中に改行を含めずに改行

とあることから、前者の挙動を説明できます。


CC BY-SA 3.0
2016-07-06T10:28:36.633
27383
2016-07-08T03:40:51.260
2016-07-08T03:40:51.260
13199
13199
27379
answer