ヒアドキュメントの基本(<<)
複数行の文字列をコマンドの標準入力として渡す方法です。終端文字(この例では END)までの内容が入力として扱われます。
cat << 'END'
こんにちは。
これはヒアドキュメントの
テスト用メッセージです。
END
変数展開の制御
クォートなし(変数を展開する)
終了文字をクォートせずに記述すると、ヒアドキュメント内の変数が展開されます。
msg='こんにちは'
cat << END
メッセージ: ${msg}
END
シングルクォートあり(変数を展開しない)
終了文字をシングルクォートで囲むと、変数は展開されず、記述したそのままの文字列が出力されます。
msg='こんにちは'
cat << 'END'
メッセージ: ${msg}
END
インデントの無視(<<-)
「<<-」を使用すると、行頭にあるタブ文字が無視されます。if 文や関数の内部など、スクリプトのインデントを維持したままヒアドキュメントを記述したい場合に便利です。
if true; then
cat <<- 'END'
1行目のインデント(タブ)は無視されます
2行目も同様です
END
fi
ファイルへの書き出し
リダイレクト(>)と組み合わせて、CSV形式などの複数行テキストを一括でファイルに保存する際によく利用されます。
cat << 'END' > fruits.csv
品名,個数,単価
りんご,10,120
バナナ,5,200
みかん,20,50
END
cat fruits.csv
ヒアストリングの基本(<<<)
1行の短い文字列をコマンドに渡す際に使用します。パイプ(echo | command)を使うよりも簡潔に記述できます。
grep '挨拶' <<< '挨拶: こんにちは'
変数の内容を渡す
変数の内容をそのままコマンドの標準入力として渡すことができます。
text='りんご があります'
# 「りんご」を「みかん」に置換
sed 's/りんご/みかん/' <<< "${text}"