bash:関数内で改行を使用するか、使用せずに印刷しますか?

bash:関数内で改行を使用するか、使用せずに印刷しますか?

最も安全なオプションは、改行なしで結果を印刷することです。これは、次のスクリプトのように、入力を行で区切る必要がない他のコマンドにコマンドをパイプするときに問題が発生する可能性があるためです。

function test_nl {
    echo result
}

function test_no_nl {
    printf %s result
}

test_nl | xxd -p | wc -c
#prints 15
test_no_nl | xxd -p | wc -c
#prints 13

test_nlメソッドが良い状況がありますか?

答え1

頼る。上記のように出力が正確に何であるかを常に確認したい場合は、改行は面倒かもしれませxxdん。ただし、一般的な用途ではuname、基本的にそのようなユーティリティを検討してくださいuptimedateする末尾の改行を印刷します。これは確かに習慣です。コマンドラインで実行されているプログラムが末尾の改行を印刷しない場合、多くのシェルは同じ行にプロンプ​​トを印刷します(以下を参照)。さらに、たとえば、コマンド置換はそれを補うために末尾の改行を削除します。

bash$ date -u | tr -d '\n' 
Sat 14 Nov 2020 03:48:19 PM UTCbash$ 

答え2

場合によっては、末尾の改行が好まれます。

  • 出力は次のようになります。人が読むことができます。多くのプロンプト($PS1キャリッジリターンを含む)は、改行文字で終わらない限り、コマンド出力の最後の行の一部または全部を上書きします。
  • 出力は一連の記録、1行に1つずつ。改行の解析 -終了改行文字を解析するよりも行が簡単です。分離などの標準シェルツールを使用してくださいread
  • 理想的には、ロギングは上記のケースの中で特別なケースにすぎません。つまり、実際に人間が消費できない一部のカスタム形式を使用しない限りです。

関連情報