sh vs bash : A summary
もしあなたがこれを読んでいるなら、過去にシェル、sh、bashなどの用語に出会ったことがある可能性が高いです。 これらの用語は混乱しているように聞こえるかもしれませんが、これらは密接に関連しているため、問題をさらに悪化させています。
シェル vs カーネル
先に進む前に、シェルとカーネルという用語が何を意味するのかを理解することが重要です。 ハードウェアとの対話、ファイル I/O の実行、およびプロセスの起動などの処理を担当します。 技術的に言えば、シェルはコマンドラインインタプリタであり、ターミナルエミュレータ (対話モード) で入力したコマンドを解釈するか、シェルスクリプト (コマンドを含むテキストファイル) を処理するプログラムである。
さて、シェルとカーネルが何であるかを理解したところで、sh と Bash について理解しようとします。 ここで重要なのは、shはそれ自体がプログラミング言語ではない、ということです。 単なる仕様書なのです。 仕様書とは、その言語の構文と意味論を詳細に記述したものです。 仕様には実装は含まれていません。
Bash
独自のシェルやカーネルを持つさまざまなオペレーティングシステムが存在します。 BashはGNUオペレーティングシステムのためのシェルである。 しかし、bash はプログラミング言語であるとも言えます。
Wait, isn’t that confusing? bashはシェルであり、プログラミング言語でもあるのでしょうか。
pythonについて考えてみましょう。 Python を対話モードで起動することもでき、シェルのように振る舞います。 あるいは JavaScript、Ruby、その他のスクリプト言語。
理にかなっていますか。
つまり、bashはshの実装と考えられるプログラミング言語です(時代とともに変化していますが)
要約すると、shは仕様、bashは実装です
。