ターミナルでASCIIアートがどのように見えるかを見たいです。
$ cat <<EOF
> # ____ _
> # _ _ / __/ ___ _ | |_
> # | | | |/ / / _` || __|
> # | |_| |\ \__
答え1
これはbashよりも一般的です。 POSIXシェルでは、あなたのシェルEOF
が呼び出されます。言葉、議論中ここのドキュメント:
文字がない場合言葉引用した場合、この文書のすべての行は、パラメータ拡張、コマンド置換、および算術拡張のために拡張する必要があります。この場合、
<backslash>
次のように表示されます。<backslash>
二重引用符内(二重引用符を参照) ただし、二重引用符文字()は、または二重引用符が'"'
表示されない限り、このマニュアルで特別に扱うべきではありません。"$()"
"``"
"${}"
引用は、一重引用符、二重引用符、またはバックスラッシュ文字を使用して行われます。 POSIX はここのドキュメントディスカッションで言及されています。引用する:
さまざまな引用メカニズムには、エスケープ文字、一重引用符、二重引用符が含まれます。ここにある文書は代替引用形式を表します。ここのドキュメント。
欠落している文字の処理を理解するための鍵は、#
ここの文書の定義です。
許可するリダイレクトシェル入力ファイルに含まれる行数
つまり、シェルはデータに何の意味も与えません(可能なパラメータ拡張などを除く)。リダイレクト別のプログラムでは:cat
シェルインタプリタではありません。リダイレクトする場合シェル結果は、シェルがデータに対して実行できるすべての操作になります。
答え2
ここにはコメント付きの行はありません。
man bash
:
パラメータと変数の拡張、コマンドの置換、算術拡張、パス名の拡張は単語に対して行われません。 Wordに引用符が含まれている場合、区切り文字はWordから引用符を削除した結果であり、文書の行はここでは拡張されません。単語が引用されていない場合、文書内のすべての行はパラメータ拡張、コマンド置換、および算術拡張を経て、文字の順序\は無視され、\は文字\、$、および`を引用するために使用する必要があります。
したがって、以下が必要です。
cat <<"EOF"