1.03.3標準
catの標準入力へ複数行のテンプレートを直接記述する。
テンプレート中の$USERは変数展開せず文字列のまま渡す。
適切なhere-document開始行はどれか。
× 不正解
here-documentのdelimiterを引用すると、本文のパラメータ展開やコマンド置換などが抑止され、固定テキストを渡せる。
詳細解説
誤り
cat << EOF区切り語が未引用のため、本文中の$USERが展開される。
誤り。複数行入力は作れるが、本文中の$USERがaliceなど現在値へ展開される。
誤り
cat < EOFEOFという名前のファイルを標準入力として開く。
誤り。後続本文を読む構文ではなく、EOFという実ファイルがなければopenに失敗する。
誤り
cat <<< EOFhere-stringとして1行の文字列EOFを渡し、複数行本文を開始しない。
誤り。here-stringは右辺の1語を改行付きで渡し、EOFまでの複数行本文を収集しない。
正しい
cat <<'EOF'引用した区切り語によりhere-document本文の変数展開を抑止する。
正しい。delimiterが引用されているため、本文中の$USERを文字通りcatへ渡す。
実際に確かめる
一時的な検証環境で実行できる例です。
USER=alice; cat <<'EOF'
hello $USER
EOF期待される結果
hello $USER理解のポイント
- <<はhere-document
- quoted delimiterは展開抑止
- <はfile input
確認時の注意
- 確認環境: Bash 5.x / here-documentのみ
基礎のおさらい
delimiter行
終了行にはdelimiterだけを置き、不要な空白を加えない。
一時入力
設定生成や複数行SQLなどをstdinへ渡せるが、秘密値をコマンドやログへ露出させない配慮が必要である。
問題IDKL-101-481
確認環境Bash 5.x / here-documentのみ
最終技術確認2026-08-13
誤り・権利侵害を報告