回答:
優先され、最も広く使用されているものは同じものではありません。一方でprintf、多くの理由のために優れている、ほとんどの人はまだ使用echo構文が単純であるため。
優先すべき主な理由printfは次のとおりです。
echo 標準化されていないため、システムごとに動作が異なります。あなたが実際に何をしているかを予測するのは難しいですecho foo。例として、私のDebianシステムで:
$ type -a echo
echo is a shell builtin
echo is /bin/echo
ご覧のとおり、2つの異なるechoコマンドがあります。1つはシェル(この場合はbash)組み込みコマンドで、もう1つは別個のバイナリです。注意bashも持っているprintf組み込みのそれは(それを指摘するために、@RaduRădeanuのおかげで)以下の問題のがあるので、その動作は、より標準化されています。
echoコマンドラインスイッチの一部(すべてではない)の実装はサポートされているため、で始まる文字列を印刷するのは困難-です。多くのプログラム--は、スイッチの終わりと引数の始まりを示すことをサポートしていますが(たとえば、を含むgrep -- -a file行を検索fileします-a)、サポートしてechoいません。だから、どのようにecho印刷しています-nか?
$ echo -n ## no output
$ echo '-n' ## no output
$ echo "-n" ## no output
$ echo \-n ## no output
$ echo -e '\055n' ## using the ASCII code works but only on implementations
-n ## that support -e
printf これを簡単に行うことができます:
$ printf -- '-n\n'
-n
$ printf '%s\n' -n
-n
$ printf '\055n\n'
-n
あなたがこれまでに知りたいと思った以上の情報についてprintfはecho、http : //unix.stackexchange.comの同様の質問に対するこの回答を参照してください。
printfより良い通訳として私が好むのを助けます。
printf(を参照type -a)。
echoも文字通りゼロの客観的な技術的利点があります。あれは正しいですか?
echoよりも使用する唯一の理由printfは、形式がより単純になる可能性があることです。印刷する内容がわかっている場合は、echo fooを入力するよりも速くて簡単ですprintf 'foo\n'。それとは別に、変数を出力する必要があるスクリプトを作成するとき、を使用する正当な理由はありませんecho。
どちらが望ましいかを尋ねること自体は不完全です。
したいのが、newlinesで終了する1行以上のテキストを出力することだけであれば、echoで十分です。より賢いもの、特に改行のない「部分的な行」を含むものが意図されている場合は、printfがその目的に最適です。
echo簡単で行われる「改行を避ける」、実装echo -n。実際、-nエコーの機能の中で最もポータブルです。POSIXによると、SystemVには存在しませんが、ほとんどのUnicesに存在します。
-n、それ以外は何もわかりません。