しらいです。

In article <m365ga74xe.fsf@kzin.dip.jp>, Mito  <co_mon@ybb.ne.jp> wrote:
>ところで「眷族」って何と読むんですか?
>無知で恥ずかしいですが、初めて見ました。

 なんか余り良い反応が返って来ない用語だったようですが、UNIX
関連の歴史は複雑なので、こういったややこしい用語を用いて事実
関係をうやむやにするという用途もあったりします :-)

 Bourne shell はその名のとおり Steve Bourne 氏の手によるも
のですが、Bourne 氏が Bell lab. から Sun に移ってしまったの
で、System V 陣営では David Korn 氏が独自に Korn shell を開
発することになります。
 System V は SVR4 で BSD や SunOS と統合されますが、SVR4 で
標準実装されているのもこの Korn shell です。これを元に POSIX
shell という規格が作られ、bash 2.xx は POSIX shell 準拠を謳
っています。

 一方、BSD 陣営では Sun に移った Bourne 氏を中心に job 制御
を搭載した jsh を開発しますが、BSD では C shell が優勢になっ
て来るので Bourne 氏は shell 開発から手をひいてしまいます。
 BSD はその後ややこしい裁判を経由して 4.4BSD-Lite に至る訳
ですが、その直前の 4.3BSD Net/2 で Bourne shell を全く一から
書き直した A shell が登場します。これ以降、Bourne shell が生
き残る環境は Sun OS のみとなります。

 更に別の流れとして bash と zsh があります。bash はご存知の
とおり GNU products の一つで、上のような流れとは全く独立して
開発されました。
 zsh ともなるともう既に Bourne shell 系とは呼び難い程に拡張
部分が大きいので、ここまで来ると「眷族」の系譜も怪しくなって
きますね。

# 他にも、Korn shell を free software として一から書き直し
#た pdksh とか、Debian project が ash を POSIX 準拠に改めた
#dash とか、亜流には色々あります。
# fdsh も一応 Bourne shell 系です :-)


>>  man page にはそこまで詳しくは書かれていません。POSIX でも
>> 規定されていないので、多分実装依存で構わないのだと思います。
>> 実際は Bourne shell の仕様に合わせていることが多いですけどね。
>
>あらま、そうなんですか...と思って man sh してみましたが、
>RHL9 には \ の扱いについてそこそこ書いてありましたよ。

 \ と quote との関係については 7th edition の頃から man page
に載っているので、亜流も含めて他の Bourne shell 系 shell の
man page にも載っていると思います。POSIX shell の仕様として
も明記されています。
 前の記事で意図していたのはそういった局所的なことではなくて、
quoting の rule 一般に関して「全て」が man page に載っている
訳ではないということだったんです。
 流石に eval まで出て来ると実装依存の部分が大きいので、「全
て」は書かれていないと。ちょっと急いでたのでこの辺の説明を端
折ってしまいました。

 eval とか `` とかを通すと shell の parser 部分を複数回処理
されることになります。
 例えば quote の閉じる側の問題が一番顕著でしょうかね。二段
目以降の parser は PS2 を使って追加の入力行を得ることが出来
ませんので、閉じられなかった quote をどう処理するかが実装依
存になりますね。
 Bourne shell は勝手に quote を補って処理しますが bash はこ
とごとく error 扱いにします。他の shell はこの中間で、場合に
よっては quote を補ったかのように振舞い、別の場合では error
として扱います。
 この辺りの実装は実際に現物とつき合わせて調べてみないと判ら
ないので、de-facto standard を探すだけでも一苦労ですね。

 因みに、man page の記述には "" の中の「\」「"」「`」「$」
についても言及がありますが、jsh の man page にはこれらに加え
て「,」も quote されるとあります。
 この仕様は jsh だけに存在するのですが、その理由は良く判り
ません。普通に「echo "\,"」とやっても「\,」と表示されるので、
普通の「,」ではなく何か特別な文脈で出て来るんだろうと思いま
すが、「,」って特に meta character として振舞ったりはしない
んですよね。謎の仕様です。


># POSIX は見たことないですし、どうでもいいんですが。

 今の POSIX だとこの辺りが参考になるでしょうか。

http://www.opengroup.org/onlinepubs/007904975/utilities/xcu_chap02.html

-- 
                                               しらい たかし