<<\\$fff で始まるドキュメントをここでどのように終了しますか?

<<\\$fff で始まるドキュメントをここでどのように終了しますか?

大学で見たシェルスクリプトテストでは、次の質問がありましたが、答えが得られず、Googleはほとんど役に立ちませんでした。

尋ねる:このドキュメントを終了するために使用される行区切り文字は何ですか?

fff=file
xyz <<\\$fff
...

答え1

ここで文書が終わる行は次のとおりです。

\$fff

man bashここのドキュメントセクションで:

この文書の形式は次のとおりです。

          <<[-]word
                  here-document
          delimiter

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

word引用符を削除するので、\\$fffで逆参照されます\$fff。ただし、マニュアルページに示すように、変数の拡張は行われず、そのまま残ります。

変数の拡張とバックスラッシュの解釈は、この文書の本文で行われたり、実行されたりしない場合があります。この場合、wordパラメータ拡張とバックスラッシュバックティックは次のようになります。いいえこの文書のテキストを実行します。

\ただし、入力は変数が拡張される前に終了シーケンスと比較されるため、終了行からバックスラッシュをエスケープする必要はありません。$

答え2

ターミネーターは

\$fff

私はこれが@riciが意味するものであると仮定します。彼の第二段落で述べたように、

word引用符を削除するため、 で参照をキャンセルし\\$fffます\$fff。ただし、マニュアルページに記載されているように変数拡張は行われないため、そのまま残ります。

関連情報