#!/bin/sh cat <<EOF nyaaaaa ''' """" EOF
#!ruby puts <<EOF nyaaaaa ''' """" EOF
====
ヒアドキュメントって言うのは、上みたいなものです。
どちらも、下のような出力をします。
nyaaaaa ''' """"
'や"をエスケープする必要がない、複数行に書きやすい文字列リテラルですね。Rubyの場合は。
シェルスクリプトの場合は、文字列リテラルじゃないんですよねー。これでよく混乱する。
ヒアドキュメントの内容が標準入力に流し込まれるのです。
だから、
#!/bin/sh a=<<EOF nya EOF echo $a
とかしても、nyaだなんて出力されません。
#!/bin/sh a=$(cat<<EOF nya EOF echo $a )
みたいにしないと変数に代入されませんね。気持ち悪い。
ついでに、今日はじめて知ったRubyのヒアドキュメントについて。
#!ruby `echo hoge` # => "hoge"
`hoge`というものは、hogeコマンドを実行した結果の文字列リテラルを返します。
で、これがヒアドキュメントとどうか関わってくるかと言うと、こんなことができちゃうのです。
#!ruby command = 'ls' <<`EOF` echo hoge #{command} -la EOF
複数行のコマンドを簡単にかけちゃいます。勿論実行した結果の文字列が帰ってきます。式展開も使えちゃいます。
楽しい!!✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌
ヒアドキュメント、使いこなせると便利だと思います。