SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【bash】 echoとprintfの違い

問題

シェルスクリプトで echo コマンドでも printf コマンドでも文字を出力できるけど、何か違うの?

答え

echo は改行を付与する。printf は改行したいときに自分で改行を入れる必要がある。

$ echo '123' > test.txt
$ echo '123' >> test.txt
$ echo '123' >> test.txt
$ cat test.txt
123
123
123
$ printf '123' > test.txt
$ printf '123' >> test.txt
$ printf '123' >> test.txt
$ cat test.txt
123123123

echo が入れる改行は環境により異なるので、改行文字によるトラブルを避けたかったら printf を使うのが良い。

echo は複数の引数を取り、スペースで区切って出力させることができる。

$ echo abc 123 def 456
abc 123 def 456

文字列を整形したいときは printf コマンドが便利。

$ printf "HOME=[%s]\n" $HOME
HOME=[/home/test]
$ printf "HOME=[%s]\nUSER=[%s]\n" $HOME $USER
HOME=[/home/test]
USER=[test]
$ printf "%05d\n" 123
00123

逆に、echo と違い、printf コマンドの第一引数は % によるフォーマット指定を解釈するため、スクリプト外部から得た文字列をそのまま第一引数に含めてしまうと、フォーマット文字列攻撃を受ける可能性があるので注意。

関連するメモ

コメント