Rc (シェル)

rc（"run commands"）は、Version 10 UnixとPlan 9のためのコマンドラインインターフェースである。rcはBourne shellに似ているが、その構文はより簡潔なものになっている。また、rcはトム・ダフによって作られた。彼はDuff's deviceと呼ばれるC言語の構築で有名である (PDF; 1990 version)。

オリジナルなrcのUNIXに対するポートは、Plan 9 form User Spaceの一部としてなされた。rcのUNIX系OSへのリライトはバイロン・ラキツィスによるものも利用可能だが、それはいくつかの互換性のない変更を含んでいる。

rcは、オリジナルのBourne shellがALGOL風の構造を持つのに対して、C言語のような構造を持つ。ただし、"if not"構造を"else"の代わりに使い、リストの繰り返しにBourne shell風の"for"ループを持っている。rcにおいては"$@"のような構造を排除する必要のために、すべての変数は文のリストとなっている。変数は展開されるときに再分割されない。この言語はダフの論文に記載されている。

 影響 
 es 
es（"extensible shell"）は、ラキツィスとポール・ハウァーによって開発された、オープンソースのコマンドラインインターフェースで、rcシェルに影響を受けたスクリプト言語の構文を利用している。esは、ラツキィスによるUNIXのためのrcのクローン
のコードをオリジナルのベースにしている。

es（＝"extensible shell"）は、UNIXシェルとして、完全な関数型プログラミング言語を提供することを意図している。esの大部分の開発は1990年代の初頭に始まり、1993年冬のサンディエゴにおけるUSENIXの会議において紹介された後Es: A shell with higher-order functions by Byron Rakitzis, NetApp, Inc, and Paul Haahr, Adobe Systems Incorporated; Archived at Archive.Org.、公式の
リリースは1997年の0.9-beta-1以後やめられた。また、esは、zshやbashなどのポピュラーなシェルに比べて機能が欠けている。のパブリックドメインな派生版は2019年現在でも開発されている。

 例 
Bourne shellスクリプト

if [ "$1" = "hello" ]; then
    echo hello, world
else
    case "$2" in
    1) echo $# 'hey' "jude's"$3;;
    2) echo `date` :$*: :"$@":;;
    *) echo why not 1>&2
    esac
    for i in a b c; do
        echo $i
    done
fi

はrcでは以下のように表記される。

if(~ $1 hello)
    echo hello, world
if not {
    switch($2) {
    case 1
        echo $#* 'hey' 'jude''s'^$3
    case 2
        echo `{date} :$"*: :$*:
    case *
        echo why not >[1=2]
    }
    for(i in a b c)
        echo $i
}

Rcはまた、より動的なパイプをサポートしている。

 a |[2] b    # aの標準エラー出力のみbへパイプする — Bourne shellにおける'3>&2 2>&1 >&3 | b'と等価である
 a <>b       # aの標準入力および標準出力としてファイルbを開く
 a <{b} <{c} # a {bの標準出力} {cの標準出力}となる。""という名前でよく知られている

 出典 

 外部リンク 
 - Plan 9のmanページ
Plan 9 from User Space - Linuxやmac OSなどのUNIX系システム向けのrcなどのPlan 9由来のツールを含む
Byron Rakitzis' rewrite for Unix
es Official website

Category:Unixシェル
Category:Inferno (オペレーティングシステム)