標準的な答えは、先頭のタブ (空白ではなくタブである必要があります) と-
「単語」の前に使用することです。
cat <<-'EOF'
Tab-indented text
Blank-indented text
EOF
(「Tab-indented」の前に 1 つ以上の実際のタブがある場合) は次のように出力されます。
Tab-indented text
Blank-indented text
それが不便すぎる場合は、sed
代わりにcat
次を使用することもできます。
sed 's/^[ ]*//' <<EOF
Randomly
Indented
Text
EOF
出力は次のとおりです。
Randomly
Indented
Text
(繰り返しますが、適切な場所にタブがあることを確認する必要があります。ここでは、コマンドの正規表現を意味しsed
ます。または、必要に応じて使用することもできますsed 's/^[[:space:]]*//'
。)
'EOF'
vsの使用EOF
は、ヒア ドキュメントの本文がどのように解釈されるか (または解釈されないか) に影響することに注意してください。比較:
cat <<-EOF
$(rm -fr *) # Do not try this at home! (Or at work.)
$HOME
EOF
と
cat <<-'EOF'
$(rm -fr *)
$HOME
EOF
1 つ目は、シェルに$(...)
表記法を認識させてコマンドを実行し、出力 (何もない) をヒア ドキュメントに置き換えます。ここ 1 年か 2 年にわたってあなたが行ってきた仕事について申し訳ありません。良いバックアップがあることを願っています。2 つ目は、先頭のタブを削除する以外は、スクリプトの内容を逐語的に処理します。これはより安全ですが、次のような表記法$(rm -fr *)
はあまり安全ではありません! 変数$HOME
は最初のバージョンで展開されます。2番目は変更されません。