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 | 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