Csh
[Wikipedia|▼Menu]

C shell作者ビル・ジョイ
初版1978年

最新版tcsh 6.18.00 / 2012年1月14日 (12年前) (2012-01-14)[1]
リポジトリ

github.com/freebsd/freebsd-src/tree/main/bin/csh

プログラミング
言語C
対応OSBSD, UNIX, Linux, macOS
種別Unixシェル
ライセンスBSDライセンス
テンプレートを表示

C shell(シーシェル、csh)は、カリフォルニア大学バークレー校の大学院生だったビル・ジョイが1970年代後半に開発したUnixシェルである。1978年にジョイが配布を始めた 2BSD という BSD UNIX のリリースで広く配布されることになった[2][3]。他にアイデアやコードに貢献した者としては、マイケル・ウベル、エリック・オールマン、マイク・オブライエン、ジム・カルプがいる[4]UNIX V6 の /bin/sh を元に作られたもので、Bourne shell (UNIX V7) と共通の先祖を持つ。

通常テキストウィンドウ内で動作するコマンドラインインタプリタであり、ユーザーがコマンドを入力するとそれに応じた処理が実行される。またシェルスクリプトと呼ばれるファイルからコマンド群を読み込むこともできる。他のUnixシェルと同様、ファイル名のワイルドカードパイプヒアドキュメント、コマンド置換(英語版)、変数、条件分岐やループなどの制御構造をサポートしている。cshが1980年代の他のシェルと異なっていた点は、対話向けの機能と全体的なスタイルである。新機能によって他のシェルよりも容易に素早く使うことができた。言語としての全体的スタイルはC言語によく似ており、Unixユーザーにとっては読みやすかった。

macOSRed Hat Linux など多くのシステムのcshは実際には改良版のtcshである。tcshの実行ファイルは "csh" と "tcsh" の両方にハードリンクされていて、どちらの名前でも同じ改良版のtcshが呼び出される。

DebianUbuntuではcshとtcshの2種類のパッケージを用意しており、前者はオリジナルのBSD版csh[5][6]、後者は改良版のtcsh[7][8]となっている。両方をインストールした場合、cshとしてどちらを使用するかupdate-alternativesコマンドで選択できる。

tcshには、ファイル名やコマンドの補完機能、Tenexシステムに由来するコマンド行編集があり、名称の先頭の t は Tenex に因んでいる[9]。tcshは機能を追加しただけでオリジナルのcshを修正したわけではないので、後方互換を保っていた[10]。当初はジョイが作ったオリジナルのソースツリーからの脇枝だったが、今ではtcshが主な枝となっていて、開発が継続されている。tcshは非常に安定しているが、主に細かいバグ修正のため、およそ1年に1回の頻度で新たなリリースがなされている[11]
設計目標と機能

C shell の主たる設計目標は、C言語に似せることと、対話型利用での改良であった。
C言語風のスタイル

Unixシステムはほとんど全体がCで書かれているため、C shell の第一の目標はスタイル上システム全体と一貫性のあるコマンド言語とすることだった。キーワード、括弧の利用、組み込みの式の文法、配列サポートなどは全てCの影響を強く受けている。

今ではC言語によく似た文法のスクリプト言語がいくつもあり、それらに比べればcshはそれほどC言語に似ているとは言えない。しかし80年代から90年代にかけて、特にAT&Tスティーブン・ボーンが開発したshと比べたときの違いは著しいと見られていた。次の例は、C shell の演算子や構文のわかりやすさを示したものである。

Bourne shellC shell
#!/bin/shif [ $days -gt 365 ]then echo This is over a year.fi#!/bin/cshif ( $days > 365 ) then echo This is over a year.endif

shにはの文法が存在しない。[(角括弧)で囲まれた条件式は、外部のtest(英語版)というプログラムで評価する必要がある。つまり、shのifコマンドは子プロセスを起動して引数を別のコマンドとして実行させる。その子プロセスが終了したときのリターンコードがゼロならthen節を探し(then節はifとは別の文だが、セミコロンをはさんで一行で書かれることが多い)、入れ子になったブロックを実行する。リターンコードがゼロ以外ならelse節を実行する。testプログラムを "test" と "[" の両方にハードリンクすることで、角括弧表記の利点が生まれ、testの機能があたかもshの一部であるかのような錯覚を与える。shで制御ブロックの終端にキーワードを逆に綴ったものを置くのは、ALGOL 68 のスタイルを踏襲したものである[12]

対照的にcshは自前で式を評価でき、高速である。可読性もよいと言われている。演算子や構文の多くはC言語のものをそのまま使っている。キーワードを逆に綴ることもなく、全体としてよりC言語に近いスタイルである。

次の例は、2の1乗から10乗までを計算するスクリプトを比較したものである。

Bourne shellC shell
#!/bin/shi=2j=1while [ $j -le 10 ]do echo '2 **' $j = $i i=`expr $i '*' 2` j=`expr $j + 1`done#!/bin/cshset i = 2set j = 1while ( $j <= 10 ) echo '2 **' $j = $i @ i *= 2 @ j++end

やはりshには式の文法が存在しないため、shのスクリプトはコマンド置換(英語版)とexprコマンドを使っている。C shell の @ 文(コマンド)は一種の駄洒落であり、"at-sign-ment" すなわち代入文を意味している。

最後の例は、switch文のスタイルの違いを示したものである。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:41 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef