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