web-dev-qa-db-ja.com

エコーで改行文字を印刷する方法は?

このようにhexdumpで文字列をダンプします_2031 3334 2e30 0a32 2032 3331 302e 000a_。 _0x0a_が改行文字であることは明らかですが、この文字列をエコーし​​ようとすると、常に_1 430.2 2 13.0_が返されます。_-e_フラグ。

何が問題なのでしょうか?テーリング_\0_は出力を台無しにしますか? _0x0a_を新しい行に出力する代替手段はありますか?

よろしくお願いします。

15

echoコマンドの改行文字は「\ n」です。次の例を見てください。

echo -e "This is line 1\nThis is line 2"

結果として出力されます

This is line 1
This is line 2

「-e」パラメータisここでは重要です。

26
Izzy

POSIX 7はできないと言っています

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html

-eは定義されておらず、バックスラッシュは実装で定義されています。

最初のオペランドが-nの場合、またはいずれかのオペランドに<backslash>文字が含まれている場合、結果は実装定義です。

オプションのXSI拡張がない限り。

代わりに printf を使用してください:

formatオペランドは、XBDファイル形式表記[...]で説明されている形式文字列として使用されます。

ファイル形式表記

\ n <改行>印刷位置を次の行の先頭に移動します。

また、Ubuntu 15.10とほとんどのディストリビューションは、次のようにechoを実装しています。

  • bashビルトイン:help echo
  • スタンドアロンの実行可能ファイル:which echo

混乱を招く恐れがあります。

最後に、この文字列をprintf "$string"で適切にフォーマットします。皆さん、ありがとうございました。