
メッセージを表示したりデータを印刷したりするには、printf
と の2 つのコマンドを使用できますecho
。
それらの使い方はどのように違いますか? どちらがより適切ですか?
答え1
好ましいものと最も広く使用されているものは同じではありません。 は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:
答え2
どちらが好ましいかを問うこと自体が不完全です。
1行以上のテキストを出力するだけであれば改行で終了であれば、echoで十分です。もっと巧妙なことをしたい場合、具体的には改行のない「部分的な行」を含める場合は、printfが最適です。その目的のために。