えぐち@エスアンドイー です。

>>> In message [ruby-list:16331] Re: printf の $ について
    On Fri, 27 Aug 1999 00:20:24 +0900, "HIRATA Naoto" <hirata-naoto / sannet.ne.jp> said:

平田> 平田です.わたなべさん,木村さん,まつもとさん,えぐちさん,
平田> 福間さん,安達さん,ありがとうございます.
平田> 
平田> えぐちさんと福間さんにはパッチまで作っていただいて
平田> 頭の下がる思いです.
平田> でも,この機能ってgettext以外に使い道あるのでしょうか?

なかなか、国際化以外の用途は思い付かないですね、、
逆アセンブラの出力ルーチンで、オペランドを Intel 並びと
Unix 並びで切替えるのには使えそうな気がする(笑)

平田> > あと、福間さん版では、
平田> >
平田> >    % ./ruby -e 'printf "%2$s - %1$s : %s\n", "One", "Two", "Three"'
平田> >    Two - One : Two
平田> >
平田> >    % ./ruby -e 'printf "%2$s - %2$s : %s\n", "One", "Two", "Three"'
平田> >    Two - Two : Three
平田> >
平田> > となり、最後につかった %n$ により以降の % の
平田> > パラメータ参照位置が降られます。
平田> >
平田> > ちょっと妙な気がしますが。FreeBSD-3.2-STABLE の printf(3)でも、
平田> > SunOS-4.1.1-JLE でも同じですので、こういう物なのでしょう。
平田> 
平田> glibc-2.0.7では
平田>     printf( "%2$s - %1$s : %s\n", "One", "Two", "Tree" );
平田>     Two - One : One
平田> 
平田>     printf( "%2$s - %2$s : %s\n", "One", "Two", "Tree" );
平田>     Two - Two : One
平田> となりました.

これは、また違ったパターンですね。。

SunOS-4.1.4-JLE の man 3 printf によると、

[>     書式指定文字列には番号付きの引数指定(すなわち、 %digit$  )
[>     と番号無しの引数指定(すなわち、 % と * )のどちらも使うこと
[>     ができますが、両方を同時に使うことはできません。両方の指定を
                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[>     混 在 された場合の結果は不定です。番号付き引数指定の場合、 n
[>     番目の引数を指定するためには、それ以前の( 1 番目から  (n-1)
[>     番目までの)引数が存在しなくてはなりません。

だそうですので、この領域の動作にこだわる必要は無いようです。

平田> > #標準では、どのように規定しているかは、まだ調べていません。
平田> > #C9X の文書あたればいいのかな、、C9X って年内に成果でるんぢゃろか
平田> 安達さんはPOSIXで定められたのではないかと書いておられましたが,
平田> 真偽は不明です.tcsh等で使われているcatgetsはXPG4で規定されて
平田> いますが,gettextはSunとGNUで使われているという事しか知りません.

調べが足りないんですが、

C9X のページ:
http://anubis.dkuug.dk/jtc1/sc22/wg14/

あたりを探しましたが、 printf(3) の %digiut$ に関する
文書は見付かりませんでした。
# .pdf や .ps になっていて、検索が困難なんです ;_;

	えぐち