えぐち@エスアンドイー です。 >>> 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 になっていて、検索が困難なんです ;_; えぐち