次: yes invocation, 前: echo invocation, 上: Printing text
printfはテキストの書式化された表示を行います.概要です.
printf format [argument]...
printfは,C printf
関数と同じ方法で,`%'指示語と
`\'エスケープを解釈しながらformat文字列を表示します.与えら
れたargumentのすべてを変換する必要があるので,format引数は
再利用されます.
浮動小数点の引数は,小数桁の前にピリオドを使用する必要がありますが,出 力は現在のロカールのLC_NUMERICカテゴリに依存します.例えば,ロカー ルの基数文字がカンマのとき,コマンド`printf %g 3.14'で`3,14' を出力しますが,コマンド`printf %g 3,14'はエラーになります.
printfは追加の指示語`%b'があり,それは,format文 字列と同じ方法で`\'エスケープを解釈しながら,その引数文字列を表示 しますが,例外として,八進数のエスケープは`\0ooo'の形式で, oooは0から3桁の八進数になります.
printfは,表示文字を指定するとき,format内の `\0ooo'を(oooが1から3桁の八進の場合)八進数として,そして, 表示文字を指定するとき,`\xhhh'を(hhhが0から三桁の16進の場 合)16進数として解釈します.
printfは,ISO C 99で導入された二文字の構文を解釈し ます.四桁の16進数hhhhで指定される16ビットのUnicode文字に対する `\u',そして,四桁の16進数hhhhhhhhで指定される32ビットの Unicode文字に対する`\U'です.現在のロカールのLC_CTYPEの部分に依存 してprintfはUnicode文字を出力し,すなわち,環境変数 LC_ALL,LC_CTYPE,LANGの値には依存しません.
`\u'と`\U'の処理では,iconv
の機能が完全になっている必
要があります.glibc 2.2(またはそれより新しいもの)を用いたシステムや,
このパッケージに優先するlibiconv
がインストールされているときは
動作します.それ以外で`\u'と`\U'を使用すると,エラーメッセー
ジが表示されます.
追加のエスケープ`\c'は,printfにそれ以上の出力を生成さ せません.
オプションは,単独の--helpや--versionだけです. See Common options.
Unicode文字の構文は,ロカールに依存している文字列を書くとき役に立ちま す.例えば,Euro通貨の記号を含む文字列です.
$ /usr/local/bin/printf '\u20AC 14.95'
これで,Euroの記号をサポートしているすべてのロカールで(ISO-8859-15, UTF-8,他)正しく出力されます.同様に中国文字を利用します.
$ /usr/local/bin/printf '\u4e2d\u6587'
これで,すべての中国のロカール(GB2312,BIG5,UTF-8,等)で正しく出力さ れます.
これらの例は,GNU bash
の組み込み関数printfと区別する
ため,printfのフルパス名が与えられていることに注意して下さい.
より長い文字列では,それぞれの文字一つ一つの16進数のコード値を探す必要 がありません.`\u'エスケープシーケンスが混ざっている ASCII文字は,JAVAのソースファイルのエンコードとして知られて います.このエンコードされた文字列を変換するために,GNU recode 3.5c(ま たはより新しいもの)を使用することが可能です.テキストの一部を,ロケー ルに依存しない方法でこのテキストを出力するシェルスクリプトに変換する方 法は以下のようになります.
$ LC_CTYPE=zh_CN.big5 /usr/local/bin/printf \ '\u4e2d\u6587\n' > sample.txt $ recode BIG5..JAVA < sample.txt \ | sed -e "s|^|/usr/local/bin/printf '|" -e "s|$|\\\\n'|" \ > sample.sh
終了ステータスのゼロは成功を示し,ゼロ以外の値は失敗を示します.