Bourne Shell(ボーンシェル)とは
Bourne Shell(ボーンシェル)は、1970年代後半にスティーブン・ボーンによって開発された
Unixシェルの一つです。
Unix Version 7で標準シェルとして採用され、その後の
Unix環境に大きな影響を与えました。
歴史
Bourne Shellは、それまでのThompson Shellを置き換える目的で開発されました。設計当初から、
シェルスクリプトをフィルタとして使用できるようにし、
制御構造や変数を導入することでプログラミング性を向上させることを目指しました。
1977年に
Unix Version 7の一部として大学などに配布され、対話的なコマンドインタプリタとしても利用されましたが、特に
スクリプト言語としての側面が重視されました。
ブライアン・カーニハンと
ロブ・パイクによる『
UNIXプログラミング環境』の出版は、Bourne Shellの普及を後押ししました。
機能と特徴
Bourne Shellは、以下のような機能と特徴を持っています。
スクリプトをコマンドとして実行可能
対話モードと非対話モードの両方で使用可能
コマンドの同期実行と非同期実行が可能
入出力のリダイレクトとパイプラインをサポート
組み込みコマンド群を提供
フロー
制御構造、クォート機能、関数を提供
型のない変数と、グローバルおよびローカルな変数スコープをサポート
スクリプトのコンパイルは不要
コマンド置換、ヒアドキュメント機能を提供
`for`、`case`などのループや条件分岐をサポート
環境変数を介してスクリプト間で情報を共有可能
さらに、Bourne Shellは、エラーメッセージをデータと分離してstderrに出力する設計を最初に取り入れたプログラムとしても知られています。
開発者のスティーブン・ボーンは、自身が関わったALGOL 68Cコンパイラの構文を参考に、`if ~ then ~ else ~ fi` や `case ~ in ~ out ~ esac` などの構文を導入しました。また、C言語で記述されたBourne Shellのソースコードは、ALGOL68風にするためにマクロが使用されました。このマクロは、後にIOCCC(国際難読化Cコードコンテスト)の開催のきっかけの一つとなりました。
1979年以降の機能強化
AT&Tは、1979年以降もBourne Shellの機能強化を続けました。各バージョンは、対応するAT&T UNIXのバージョン名で呼ばれ、具体的な機能はテストによって確認する必要がありました。
System III (1981年)
`test`コマンドの組み込み
`#`によるコメントの追加
`${parameter:=word}`形式でのパラメータのデフォルト値への置換
SVR2 (1984年)
関数定義と`return`の組み込み
`unset`、`echo`、`type`の組み込み
ソースコードのALGOL68風コードから変更
SVR3 (1986年)
`$@`の現在の用法を実装
`getopts`の組み込み
パラメータ処理の改善と関数の再帰呼び出しを可能に
8ビットクリーン対応
SVR4 (1989年)
ジョブコントロールの追加
多バイト文字のサポート
サンによってOpenSolarisで公開されたBourne Shellの派生版は、Heirloomプロジェクトによって他のUNIX系OSへ移植されました。
批判点
Bourne Shellには、以下のような批判点も存在します。
対話的な操作性:C Shellと比較して、ヒストリ機能やエイリアス機能、ジョブコントロール機能が欠けており、対話的な操作性が低い。
文法:C Shellとは異なり、C言語風の文法ではなく、ALGOLに似た文法を採用している。
式の評価:式を評価するための機能が内蔵されておらず、`test`や`expr`などの外部ユーティリティに頼る必要がある。
後継のシェル
Bourne Shellの後継として、以下のようなシェルが開発されました。
C Shell (csh): Thompson Shellから派生し、ジョブ制御機能を導入したことで人気を集めましたが、C言語風の文法を採用したため、Bourne Shellとの互換性が失われました。
KornShell (ksh): Bourne ShellとC Shellの中間のような存在で、文法はBourne Shellに近く、ジョブ制御機能をC Shellから取り入れています。
POSIXにおけるシェル標準の基礎となりました。
Bash (Bourne Again Shell): Bourne Shellをベースに、C ShellやKornShellの機能を取り入れ、GNUプロジェクトの一部として開発されました。多くのLinuxディストリビューションでデフォルトシェルとして採用されています。
rc:
ベル研究所のトム・ダフが開発したシェルで、
Plan 9 from Bell Labsでデフォルトシェルとして採用されました。
Almquist Shell (ash/dash): Bourne Shellのクローンとして開発され、BSDライセンスで提供されています。メモリ使用量が少ないため、組み込みシステムや高速なシェルスクリプトの実行に利用されています。Debian系Linuxでは、`/bin/sh`がdashへのリンクとなっています。
利用
Bourne Shellは多くの商用UNIXシステムで標準シェルとして採用されていましたが、現在では、そのスクリプトは、GNU/Linuxや他のUnix系システムでbashやdashによって実行されています。多くのシステムでは、`/bin/sh`がbashまたはdashへのシンボリックリンクとなっています。
まとめ
Bourne Shellは、Unixの歴史において重要な役割を果たしたシェルであり、その設計思想や機能は、後継のシェルに大きな影響を与えました。現在では直接利用される機会は少ないものの、シェルスクリプトの基礎を理解する上で、その歴史や特徴を知ることは重要です。
参考文献
ブルース・ブリン『入門
UNIXシェルプログラミング――シェルの基礎から学ぶ
UNIXの世界』(山下哲典訳)、ソフトバンククリエイティブ、2003年
山下哲典『UNIXシェルスクリプトコマンドブック』ソフトバンククリエイティブ、2005年
デイビッド・タンズリー『
Linux&
UNIX Shellプログラミング――Bourneシェル徹底攻略』(服部由美子訳)、ピアソンエデュケーション、2002年
中橋一朗『UNIXシェルスクリプト逆引き大全333の極意――Linux,FreeBSD,Solaris,Mac OS X対応』秀和システム、2004年
Arnold Robbins, Nelson H. F. Beebe『詳解
シェルスクリプト』(日向あおい訳)、オライリー・ジャパン、2006年