この記事では、コメントアウトされた行でもシェルの置き換えを試みるのはなぜですか?

この記事では、コメントアウトされた行でもシェルの置き換えを試みるのはなぜですか?

ターミナルでASCIIアートがどのように見えるかを見たいです。

$ cat <<EOF                                                                                                                                                                                  
> #          ____         _
> #  _   _  / __/  ___ _ | |_
> # | | | |/ /    /  _` || __|
> # | |_| |\ \__ 

答え1

これはbashよりも一般的です。 POSIXシェルでは、あなたのシェルEOFが呼び出されます。言葉、議論中ここのドキュメント:

文字がない場合言葉引用した場合、この文書のすべての行は、パラメータ拡張、コマンド置換、および算術拡張のために拡張する必要があります。この場合、<backslash>次のように表示されます。<backslash>二重引用符内(二重引用符を参照) ただし、二重引用符文字()は、または二重引用符が'"'表示されない限り、このマニュアルで特別に扱うべきではありません。"$()""``""${}"

引用は、一重引用符、二重引用符、またはバックスラッシュ文字を使用して行われます。 POSIX はここのドキュメントディスカッションで言及されています。引用する:

さまざまな引用メカニズムには、エスケープ文字、一重引用符、二重引用符が含まれます。ここにある文書は代替引用形式を表します。ここのドキュメント

欠落している文字の処理を理解するための鍵は、#ここの文書の定義です。

許可するリダイレクトシェル入力ファイルに含まれる行数

つまり、シェルはデータに何の意味も与えません(可能なパラメータ拡張などを除く)。リダイレクト別のプログラムでは:catシェルインタプリタではありません。リダイレクトする場合シェル結果は、シェルがデータに対して実行できるすべての操作になります。

答え2

ここにはコメント付きの行はありません。

man bash:

パラメータと変数の拡張、コマンドの置換、算術拡張、パス名の拡張は単語に対して行われません。 Wordに引用符が含まれている場合、区切り文字はWordから引用符を削除した結果であり、文書の行はここでは拡張されません。単語が引用されていない場合、文書内のすべての行はパラメータ拡張、コマンド置換、および算術拡張を経て、文字の順序\は無視され、\は文字\、$、および`を引用するために使用する必要があります。

したがって、以下が必要です。

cat <<"EOF"

関連情報