web-dev-qa-db-ja.com

printfがechoよりも優れているのはなぜですか?

printfechoより優れていると聞きました。 printfがRHEL 5.8の一部のプログラムにテキストをフィードするために機能しなかったため、echoは機能したため、私は自分の経験からprintfを使用する必要があった1つのインスタンスのみを思い出すことができます。しかし、明らかに、他にも違いがあり、私はそれらが何であるか、そして一方を他方に対して使用する場合に特定のケースがあるかどうかを尋ねたいと思います。

563
amphibient

書式設定オプションにprintfを使用することをお勧めします。 echoは、変数または(単純な)行の値を出力する場合に役立ちますが、それだけです。 printfは基本的に、Cバージョンの機能と同じことができます。

使用例と機能:

Echo

echo "*** Backup Shell script ***"
echo
echo "Runtime: $(date) @ $(hostname)"
echo

printf

vech="bike"
printf "%s\n" "$vech"

出典:

28
NlightNFotis

それを呼び出したい場合の1つの「利点」は、\nなどの特定のエスケープシーケンスを解釈するためにechoのように伝える必要がないことです。それはそれらを解釈することを知っており、解釈するために-eを必要としません。

printf "some\nmulti-lined\ntext\n"

(注:\nオプションを指定しない限り、最後の-nが必要です。echoはそれを意味します)

versus

echo -e "some\nmulti-lined\ntext"

printfの最後の\nに注意してください。結局のところ、それは好みの問題であり、要件使用するもの: echo または- printf

17
0xC0000022L

組み込みのシェルprintfの方がはるかに高速であるため、echoの欠点の1つはパフォーマンスです。これは、新しいコマンドの各インスタンスがWindowsのオーバーヘッドを大きくするCygwinで特に影響します。エコーの多いプログラムを/bin/echoからシェルのエコーに変更すると、パフォーマンスがほぼ2倍になりました。移植性とパフォーマンスの間のトレードオフです。常にprintfを使用するのはスラムダンクではありません。

5
John