printf と echo のどちらが良いでしょうか?

printf と echo のどちらが良いでしょうか?

メッセージを表示したりデータを印刷したりするには、printfと の2 つのコマンドを使用できますecho
それらの使い方はどのように違いますか? どちらがより適切ですか?

答え1

好ましいものと最も広く使用されているものは同じではありません。 はprintf多くの理由で優れていますが、echo構文が簡単なため、ほとんどの人がまだ使用しています。

優先すべき主な理由は次printfのとおりです。

  1. echo標準化されていないため、システムによって動作が異なります。
  2. 実行時に実際に何が実行されるか予測するのは困難ですecho foo。例として、私の Debian システムの場合:

    $ type -a echo
    echo is a shell builtin
    echo is /bin/echo
    

    ご覧のとおり、2 つの異なるechoコマンドがあります。1 つはシェル (この場合は bash) の組み込みコマンドで、もう 1 つは別のバイナリです。 にbashも組み込みコマンドがありますprintfが、その動作はより標準化されているため、それほど問題にはなりません (指摘してくれた @RaduRădeanu に感謝します)。

  3. の実装の一部 (すべてではありません) はechoコマンドラインスイッチをサポートしているため、 で始まる文字列を印刷することは困難です-。多くのプログラムは、--スイッチの終了と引数の始まりを示す をサポートしていますが (たとえば、は で を含むgrep -- -a file行を検索します)、は をサポートしていません。では、を印刷するにはどうすればよいでしょうか。file-aechoecho-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:

https://unix.stackexchange.com/a/65819/22222

答え2

どちらが好ましいかを問うこと自体が不完全です。

1行以上のテキストを出力するだけであれば改行で終了であれば、echoで十分です。もっと巧妙なことをしたい場合、具体的には改行のない「部分的な行」を含める場合は、printfが最適です。その目的のために

関連情報