pockestrap

Programmer's memo

ヒアドキュメント

#!/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

複数行のコマンドを簡単にかけちゃいます。勿論実行した結果の文字列が帰ってきます。式展開も使えちゃいます。
楽しい!!✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌


ヒアドキュメント、使いこなせると便利だと思います。