bashの拡張前噴射と拡張中噴射の違いは何ですか?

bashの拡張前噴射と拡張中噴射の違いは何ですか?

BashマニュアルにはExpansion is performed on the command line after it has been split into words.。ところが次の文章には7回の拡張をしたと出ているが、今回がword splitting6回だ。私が理解する限り、これら2つは異なる噴射です。これら2つの噴射の違いは何ですか?

答え1

ただ一つ噴射、そのようなことが起こりました。後ろに中括弧拡張、チルダ拡張、パラメータおよび変数拡張、コマンド置換、算術拡張などがありますが、今後パス名拡張。

(ヒント:言葉分割は、単語をより多くの単語に分割します。最初にコマンドラインをトークンに分割することと単語分割を混同しています。 )

  1. |まず、コマンドラインは、メタ文字、、、、、、、<space> &、および<tab>で区切ら;れた単語(または「タグ」)で区切られます。()<>

  2. コマンドラインを表す単語は、リスト、パイプ、および単純なコマンドで解析されます。

  3. 拡張は、各単純なコマンドが実行されると見なされると発生します。

    • 中括弧拡張、チルダ拡張、パラメータおよび変数拡張、コマンド置換、および算術拡張の後、シェルは引用符なしの拡張結果を繰り返し単語に分割します。今回は$IFS()内の文字で区切ります。いいえコマンドラインを区切るために使用されるメタ文字)。

    • 最後に、シェルは引用符のない拡張結果リストを再度繰り返し、パス名拡張を実行します。

POSIX仕様のすべての詳細を読んでください。シェルコマンド言語。 (POSIXは少し簡単なシェルを説明しています。Bashはいくつかの拡張機能を実装していますが、それがどのようにフィットするかを簡単に確認できます。)

質問に答えるには、次のようにコマンドラインをシェルメタ文字で区切られたトークンに最初に分割します。単語分割は拡張結果を$IFS

関連情報