本文へスキップ
BecomeCoder

シェルスクリプトコース · 第3章 引数と入出力 · レッスン12

ヒアドキュメント ― 複数行をそのまま流し込む

ブラウザで完結

導入

設定ファイルを作りたい、メール本文を組み立てたい、使い方(usage)を表示したい。echo を何行も並べるのは読みにくいものです。ヒアドキュメントを使うと、複数行のテキストをそのままの形で書けます。

説明

<<終端文字 と書くと、そこから終端文字だけの行までが、まとめて入力として渡されます。

#!/bin/bash

APP=becomecoder

cat <<EOF
使い方: sh script.sh 対象ファイル

このスクリプトは $APP のログを集計します。
複数行を、見たままの形で書けます。
EOF

終端文字は慣習的に EOF(End Of File)が使われますが、END でも MSG でも構いません。中に登場しない単語であることだけが条件です。

ヒアドキュメントの中では、$変数 は展開されます。展開させたくない($ を文字として出したい)ときは、終端文字を引用符で囲みます。

cat <<'EOF'
この中の $HOME は展開されません
EOF

ファイルに書き出したいときは、リダイレクトと組み合わせます。設定ファイルをスクリプトから生成する定番の形です。

cat <<EOF > config.txt
name=$APP
debug=false
EOF
flowchart LR
    A["cat <<EOF"] --> B["EOF までの行"] --> C["cat の標準入力へ"] --> D["画面 or > file"]

やってみよう

スクリプトを実行して、複数行がそのまま出ることを確かめましょう。次に cat <<EOF > config.txt の形に書き換えて実行し、端末で cat config.txt と打ってファイルができていることを確認してください。

演習

ヒアドキュメントを使って config.txt を作り、その中身を cat config.txt で表示してください(中身に name=becomecoder を含めること)。

ヒント1を見る

cat <<EOF > config.txt で始め、EOF だけの行で終わります。

ヒント2を見る

最後に cat config.txt を書き足すと中身が確認できます。

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

シェルスクリプト(シミュレート)

スクリプトを書くエディタと、それを動かす仮想シェルを読み込みます(本物のbashではなく、動きを再現した学習用の環境です)。
スクロールして表示された時点でも自動で読み込まれます。