Linuxでbash以外にもshがいるのはなぜ?

clint-patterson-yGPxCYPS8H4-unsplash.jpg

質問

Linuxでbash以外にもshがいるのはなぜ?


解答

とても良い質問です。
Linux に bashsh の両方が存在する理由 は、歴史的経緯と互換性維持のためです。以下で詳しく説明します。


1. sh は「Bourne Shell」(1970年代) の伝統的標準

  • Unixの初期から存在する、最初の標準シェル/bin/sh です。

  • shスクリプト実行の共通インターフェイス として長く使われてきました。

  • そのため、多くのシェルスクリプト(特に古いソフトウェアやシステムスクリプト)は /bin/sh を前提に動作します。


2. bash は後発の高機能シェル

  • bash(Bourne Again SHell)は、GNUプロジェクトが開発した Bourne Shell互換の上位互換シェル

  • sh 互換を保ちつつ、以下のような拡張機能があります:

    • コマンド履歴 (history)

    • コマンド補完 (tab completion)

    • 配列や算術式の拡張

    • [[ ]] 構文などの便利な文法


3. なぜ両方がいるのか

  • 後方互換性のため
    多くの古いスクリプトは /bin/sh と書かれているため、bash に完全移行すると互換性が壊れる可能性があります。

  • システムの互換性維持
    Linuxディストリビューションでは、

    • /bin/sh/bin/bash へのシンボリックリンク(Ubuntu では /bin/dash
      として動作させています。
      つまり「sh」は POSIX互換モードのbash/dash として機能します。


4. 判定・挙動の違い

呼び出し方法実際の動作特徴
/bin/bashbash(拡張機能すべて利用可能)高機能・対話的に便利
/bin/shbashをPOSIXモードまたはdashとして起動移植性・互換性重視

bashsh として起動されると、POSIX準拠モードで起動され、bash独自構文は無効になります。


5. 対策・注意点

  • 移植性を重視するスクリプト(他のOSでも動かしたい場合)は /bin/sh を指定。

  • bash特有の構文[[ ]], {1..10}, $RANDOMなど)を使うなら /bin/bash を指定。

  • OSによって /bin/sh の中身が違う(bashやdashなど)ことを意識する。


まとめ

項目shbash
由来Bourne ShellBourne Again Shell
目的標準的・移植性重視高機能・利便性重視
起動方法/bin/sh/bin/bash
主な利用場面システムスクリプトユーザーの操作・開発



bash Idioms Write Powerful, Flexible, Readable Shell Scripts【電子書籍】[ Carl Albing ]

価格:4611円
(2025/11/11 22:04時点)
感想(0件)


Linuxをマスターしたい人のための実践Ubuntu [ 水野源 ]

価格:3960円
(2025/4/23 15:17時点)
感想(0件)


 



この記事へのコメント

広告です。クリックいただけると励みになります。