Bash
マニュアルにはExpansion is performed on the command line after it has been split into words.
。ところが次の文章には7回の拡張をしたと出ているが、今回がword splitting
6回だ。私が理解する限り、これら2つは異なる噴射です。これら2つの噴射の違いは何ですか?
答え1
ただ一つ噴射、そのようなことが起こりました。後ろに中括弧拡張、チルダ拡張、パラメータおよび変数拡張、コマンド置換、算術拡張などがありますが、今後パス名拡張。
(ヒント:言葉分割は、単語をより多くの単語に分割します。最初にコマンドラインをトークンに分割することと単語分割を混同しています。 )
|
まず、コマンドラインは、メタ文字、、、、、、、<space>&
、および<tab>で区切ら;
れた単語(または「タグ」)で区切られます。(
)
<
>
コマンドラインを表す単語は、リスト、パイプ、および単純なコマンドで解析されます。
拡張は、各単純なコマンドが実行されると見なされると発生します。
中括弧拡張、チルダ拡張、パラメータおよび変数拡張、コマンド置換、および算術拡張の後、シェルは引用符なしの拡張結果を繰り返し単語に分割します。今回は
$IFS
()内の文字で区切ります。いいえコマンドラインを区切るために使用されるメタ文字)。最後に、シェルは引用符のない拡張結果リストを再度繰り返し、パス名拡張を実行します。
POSIX仕様のすべての詳細を読んでください。シェルコマンド言語。 (POSIXは少し簡単なシェルを説明しています。Bashはいくつかの拡張機能を実装していますが、それがどのようにフィットするかを簡単に確認できます。)
質問に答えるには、次のようにコマンドラインをシェルメタ文字で区切られたトークンに最初に分割します。単語分割は拡張結果を$IFS
。