本を読む

読書やコンピュータなどに関するメモ

echoの区切りは' '決めうち

 Unix系OSのechoコマンドでは、複数の単語を並べると、空白区切りで出力される。

$ echo foo bar baz
foo bar baz
$ echo foo bar      baz
foo bar baz

 これをIFSなどの変数で変更できないかなと思ったのだけど、結論としては' '(スペース1個)決めうちだった。

 まずcoreutilsのechoのソースから(src/echo.c)。

264:      if (argc > 0)
265:        putchar (' ');

 続いてbash内蔵のechoのソースから(builtins/echo.def)。

189:  if (list)
190:    putchar(' ');

 dash内蔵のechoのソースから(builtins/echo.def)。

453:                 c = ' ';
454:                 if (!*++argv) {
455: end:
456:                         if (nonl) {
457:                                 break;
458:                         }
459:                         c = '\n';
460:                 }
461:                 outc(c, outs);

 zshの場合は、echoはprintの特殊形という実装になっている。printでは-cオプションで桁揃えしたり-lオプションで改行区切りにしたり、-Nオプションでヌル文字区切りにしたりできるけど、それを除くと、やはり' '区切り。

 まず、-cオプションじゃない場合の処理(Src/builtin.c)。

4053:           fputc(OPT_ISSET(ops,'l') ? '\n' :
4054:                 OPT_ISSET(ops,'N') ? '\0' : ' ', fout);

 -cオプションの場合の処理も(Src/builtin.c)。

3969:               if (n < argc)
3970:                   for (; l < sc; l++)
3971:                       fputc(' ', fout);

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://emasaka.blog65.fc2.com/tb.php/1138-013983bf

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad