色々な言語で printf


2017年 10月 22日

printfといえば、C言語のこれが有名である。

printf("hello, world\n");

というか、プログラミング言語C の本は、これで始まる。

実際にはprintfは、%何とかの形式で色々書式指定することにより、整形されたプリントのために使われる。

C言語のprintfが評価されたのであろう、このprintf が今では多数の言語に実装されている。
Wikipediaにちゃんとprintfのページがあり、英語版の方はしっかり書かれている。
programming languages with printf によると、25ほどのプログラミング言語が並んでいて圧倒される。

printf という関数あるいはメソッドは、実はプログラミング言語だけにとどまらず、シェルにも実装されている。
以下ではbashの例を示すが、他のシェルでも実装されているのではないかと思う。

まずは、基本的な使い方である。
単にメッセージを出したければ、echoを使えば良いだけなのだが、整形を色々したければ、書式指定文字列でできる。

$ greeting="Hello shell"
$ echo $greeting
Hello shell
$ printf "message:%s\n" $greeting
message:Hello
message:shell
$ printf "message:%s\n" "$greeting"
message:Hello shell

printfの出力をシェルの変数に代入して後て使いたいときがある。
そのときは、次のように、printf全体を$()で囲むとできる。

$ text=$(printf "message:%s\n" "$greeting")
$ echo $text
message:Hello shell

10進数、16進数の変換も可能である。

$ v=1000
$ printf "%x\n" $v
3e8
$ printf "%#x\n" $v
0x3e8
シェル上で浮動小数点数の演算も行いたい場合には、 bc(An arbitrary precision calculator language)を使えば可能であるが、そこまでの偏執狂者ではないのでシェル上では浮動小数点は扱わないことにしている。 そういう場合は、何らかのスクリプト言語を使う。
でも、どうしても全てをシェルで書かないと気がすまないシェル教徒を制止する気はない。