- 書式
- printf FORMAT [ARGUMENT...]
概要
printf
コマンドは ARGUMENT
を
書式文字列 FORMAT
に従って埋め込み、
結果を表示します。
FORMAT
は
変換指定を含められます。
各変換指定は
引数に対応する
変換指定に応じて
次々に置き換えられます。
変換指定の詳細は
以下で詳述します。
変換指定は
C言語の printf(3)
由来です。
echo とは異なり、
printf
は文字列の一部に
\n
を指定しない限り
改行を付加しません。
なお、
fishのビルトイン printf
は
GNU Coreutils 6.9の printf
と同等です。
OSに付属しているなど
新しいバージョンの
printf
を使いたいならば、
command printf を使ってください。
変換指定
以下の変換指定が使えます。
%d
- 10進数(符号付き、符号無し)。
%i
- 符号付き整数。
%o
- 符号無し8進数。
%u
- 符号無し10進数。
%x
/ %X=- 符号無し16進数。
%f
/%g
/%G
- 浮動小数点数。
%e
/ %E=- 科学的記数法による浮動小数点数(XXXeYY形式)。
%s
- 文字列。
%b
- バックスラッシュエスケープを解釈する文字列。
ただし8進数エスケープは\0
または\0ooo
形式。 %%
%
そのもの。
注意:変換は失敗することがあります。
たとえば、 102.234
は
整数に変換できないため、
printf
はエラーを起こします。
バックスラッシュエスケープ
printf
は
バックスラッシュエスケープを解釈します。
\"
- ダブルクォート
\\
- バックスラッシュ
\a
- アラート(BEL) (
^G
) \b
- バックスペース(
^H
) \c
- これ以上出力しないようにする
\e
- ESC文字 (
^[
) \f
- フォームフィード (
^L
) \n
- 改行文字 (
^J
) \r
- キャリッジリターン (
^M
) \t
- タブ文字 (
^I
) \v
- 垂直タブ (
^K
) \ooo
- 8進数ooo(1〜3文字)で表されるバイト
\xhh
- 16進数hh(1〜2文字)で表されるバイト
\uhhhh
- 16ビットUnicode文字の16進数表記hhhh
\Uhhhhhhhh
- 32ビットUnicode文字の16進数表記hhhhhhhh
書式文字列は
引数全てを変換するのに
必要な限り何度も再利用されます
。
引数に不適切な
書式指定がある場合は
エラーになります。
たとえば、
printf "%d" 102.234
はエラーになります。
なぜなら、
102.234
は整数として
整形できないからです。
使用例
$ printf '%s\t%s\n' flounder fish flounder fish
上記は
タブ文字で区切られて表示され、
改行されます。
これは
自分独自の補完を記述する のに便利です。
なぜなら、
fishの補完スクリプトは
「選択肢 タブ文字 説明文」
の出力が求められるからです。
$ printf '%s:%d' 'Number of bananas in my pocket' 42 Number of bananas in my pocket: 42
上記は改行を出力しません。
最後までお読みいただき、ありがとうございました。参考になれば嬉しいです。