とても良い質問です。
Linux に bash と sh の両方が存在する理由 は、歴史的経緯と互換性維持のためです。以下で詳しく説明します。
1. sh は「Bourne Shell」(1970年代) の伝統的標準
Unixの初期から存在する、最初の標準シェルが /bin/sh です。
sh は スクリプト実行の共通インターフェイス として長く使われてきました。
そのため、多くのシェルスクリプト(特に古いソフトウェアやシステムスクリプト)は /bin/sh を前提に動作します。
2. bash は後発の高機能シェル
3. なぜ両方がいるのか
4. 判定・挙動の違い
| 呼び出し方法 | 実際の動作 | 特徴 |
|---|
/bin/bash | bash(拡張機能すべて利用可能) | 高機能・対話的に便利 |
/bin/sh | bashをPOSIXモードまたはdashとして起動 | 移植性・互換性重視 |
bash が sh として起動されると、POSIX準拠モードで起動され、bash独自構文は無効になります。
5. 対策・注意点
移植性を重視するスクリプト(他のOSでも動かしたい場合)は /bin/sh を指定。
bash特有の構文([[ ]], {1..10}, $RANDOMなど)を使うなら /bin/bash を指定。
OSによって /bin/sh の中身が違う(bashやdashなど)ことを意識する。
まとめ
| 項目 | sh | bash |
|---|
| 由来 | Bourne Shell | Bourne Again Shell |
| 目的 | 標準的・移植性重視 | 高機能・利便性重視 |
| 起動方法 | /bin/sh | /bin/bash |
| 主な利用場面 | システムスクリプト | ユーザーの操作・開発 |
この記事へのコメント