シェルが独自の "echo"コマンドを内部的に実装するのはなぜですか? [コピー]

シェルが独自の "echo"コマンドを内部的に実装するのはなぜですか? [コピー]

(純粋に学問的な質問であることを参考にしてください...何か問題を解決しようとするのではなく、ただ答えが気になるだけです。)

ECHO(1)マニュアルページ(GNU echo)から:

注:シェルには通常、ここで説明されているバージョンを置き換える独自のバージョンのechoがあります。サポートされているオプションの詳細については、シェルのドキュメントを参照してください。

ECHO(1)マニュアルページ(BSD echo)から:

一部のシェルは、このユーティリティと同様または同じ組み込みのechoコマンドを提供できます。特に、sh(1)に組み込まれているechoは-nオプションを受け入れません。内蔵(1)のマニュアルページを参照してください。

echoシェルで実行すると、内部コマンドが実行されますが、フルパスは、たとえば/bin/echo外部プログラムを実行するように指定されます。

シェル自体に特定のコマンドを実装させるのはなぜですか?任意のコマンドが必要です〜しなければならないシェルによって実装されている(例えばcdreadなど)しかしなぜecho?あまりにも頻繁に使用され、プロセス設定やコンテキスト切り替えを避けることで、節約された時間が測定可能なためですか?特に歴史的に見るとそうです。

bashたとえば、必ずしも必要ではない多くの機能があるという事実を無視し、速度要素が重要な場合、なぜexpr[/ testmkdirなどのようなものをrmdirシェルに入れないのですか?実装がほとんど文字通り関数呼び出しであるmkdirandのようなものは、含める確かな候補のように見えます。rmdirlibc

答え1

速度要因が理由の1つです。これは、ファイル引数(たとえばecho、など)なしでtest一般的に使用されるコマンドに特に意味があります。printfこれにより、ファイルアクセスやファイルパラメータやコマンド自体を読み取ることなく操作を完了できます。

他のコマンドkillkill %1

一部のシェルは、単純なシェルスタイルパターンの名前変更などの機能を追加するmvために使用されるコマンドなど、他の「高レベル」コマンドも実装しています。zsh

関連情報