Re: [Q] 便乗質問 shの\%->%って何で必要?( Re:cronで逆シングルクォーテーションを使いたい)
しらいです。
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
--
しらい たかし
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735