cat > /path/to/file << EOF
Bashスクリプトで1つのファイルに複数行を印刷するときは、次のように使い慣れています。会社の前のコードをチェックして、よく知られたコードの代わりにcat EOT
ディレクティブを見つけました。cat EOF
時間代わりにF結局)好奇心が私に尋ねた。
すばやく調査を行い、見つけたものこれは別の質問ですしかし、それは私が知りたいこととは関係がないと思います。
次のコードでいくつかのテストを行いました。
password=hello
cat > ./hello.txt << EOT
authentication {
auth_type PASS
auth_pass $password
}
EOT
EOF
私が得た出力は代わりに使用するのとまったく同じですEOT
。予想通り、出力は次のようになります。
root@test_VM:~# bash test.sh && cat hello.txt
authentication {
auth_type PASS
auth_pass hello
}
質問は次のとおりです。
EOT
これらを使うとの違いは何ですかEOF
?- いつ他のものを使うべきですか?
ベストアンサー1
これら2つの文字列または他の文字列の間に違いはなく、特別な意味もありません。これは任意のターミネータにすぎないので、必要なほとんどすべての文字列を使用できます。
もちろん、データ自体には対応する特定の行を含めることはできません。したがって、データに異なるhereドキュメントを含むシェルスクリプトなどが含まれている場合は、両方のドキュメントで異なるターミネータを使用する必要があります。一種の説明文字列を使用すると、将来のスクリプト読者に役立つ可能性があります。
例えば
cat > test.sh <<END_OF_SCRIPT
cat <<EOF
hello
EOF
END_OF_SCRIPT
test.sh
シェルを介して実行されたときに生成される印刷hello
。
ただし、here 文書を開始する行に終端子を引用すると違いはありますが、here document データの拡張を妨げることになります。これにより、$i
変数の値が代わりに印刷されます。
cat << 'EOF'
$i
EOF
また見なさい:
- 3.6.6 ここに文書化バッシュマニュアルから
- 2.7.4 ここのドキュメントPOSIX シェル言語の説明
- ここのドキュメントwiki.wooledge.orgから