どちらがより良いprintfまたはエコーですか?


16

メッセージや印刷データを表示するためにそこに利用可能な2つのコマンドがあるprintfecho
それから彼らはどのように異なって使用しましたか?どちらがより好ましいですか?


8
あなたはここで答えを見つけるでしょう:unix.stackexchange.com/a/65819
user218740

回答:


27

優先され、最も広く使用されているものは同じものではありません。一方で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します-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
    

あなたがこれまでに知りたいと思った以上の情報についてprintfechohttp : //unix.stackexchange.comの同様の質問に対するこの回答を参照してください。

/unix//a/65819/22222


1
良い答えを与えられます。printfより良い通訳として私が好むのを助けます。
パンディア

3
ポイント2では、同じことが当てはまりますprintf(を参照type -a)。
ラドゥラデアヌ

2
@RaduRădeanutrueですが、POSIXではprintfより厳密に定義されており、組み込みは同じ標準に従っていると思います。POSIXの仕様のためにecho他方が実装とその間の相違が存在するであろうことを緩く、さらに明示的状態であるprintf好まれるべきです。
テルドン

ワオ。そのため、を使用してecho文字通りゼロの客観的な技術的利点があります。あれは正しいですか?
JamesTheAwesomeDude

1
@JamesTheAwesomeDudeいいえ、まったく技術的な利点はありません。使用するechoよりも使用する唯一の理由printfは、形式がより単純になる可能性があることです。印刷する内容がわかっている場合は、echo fooを入力するよりも速くて簡単ですprintf 'foo\n'。それとは別に、変数を出力する必要があるスクリプトを作成するとき、を使用する正当な理由はありませんecho
テルドン

4

どちらが望ましいかを尋ねること自体は不完全です。

したいのが、newlines終了する1行以上のテキストを出力することだけであれば、echoで十分です。より賢いもの、特に改行のない「部分的な行」を含むものが意図されている場合は、printfがその目的に最適です


応じて、echo簡単で行われる「改行を避ける」、実装echo -n。実際、-nエコーの機能の中で最もポータブルです。POSIXによると、SystemVには存在しませんが、ほとんどのUnicesに存在します。
テルドン

私はエコーで改行を避けようとさえしないように、十分に異なる分野で働いてきました。SCO、AIX、HP-UX、およびLinuxで移植可能なスクリプトを作成することは...困難です。
モンティハーダー

絶対に議論は​​ありません。私が言っているのは、改行が最も問題が少ないということです。GNU以外のシステムに移植しようとすると、すぐにすべてのベットがオフになります。BSDとSystemVを信頼できると思いますが-n、それ以外は何もわかりません。
テルドン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.