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


15

hexdumpこのような文字列をダンプします2031 3334 2e30 0a32 2032 3331 302e 000a。それが0x0a改行文字であることは明らかですが、この文字列をエコーアウトしようとすると、常に得られます1 430.2 2 13.0-改行を使用しても、改行はスペースに置き換えられ-eます。

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

よろしくお願いします。


この文字列をエコーアウトしようとすると、どのように正確に行いますか?使用する正確なコマンドは何ですか?
デニス

@Dennisつまりecho -e。おかげで、解決策が見つかりました。
Summer_More_More_Tea

1
推奨される解決策は、のprintf "...\n"代わりに使用することですecho
マイケル

回答:


26

echoコマンドの改行文字は「\ n」です。次の例を取り上げます。

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

出力になります

This is line 1
This is line 2

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


3
ところで、これ"echo -e ..."はbashのエコーに依存して正しく動作します(たとえば、dash「-e」を出力するだけです)。ただし、「/ bin / echo」も機能する場合があります(または機能しない場合があります)。残念ながら(おそらく適切に)、多くのエコーがあり、どのエコーを取得するのかを気にかけたくありません。を使用すること'printf "....\n"は、envとシェル間でより移植性の高いオプションです。
マイケル

@michael_nは、実際にOPが最終的に元に戻したものです。しかし、質問は明示的に「エコーあり」と述べていました。したがって、このように答えます。とにかく、それは「Bashで」ではなかったので、それらの違いを指摘してくれてありがとう!
イジー

4

POSIX 7ではできない

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

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

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

オプションのXSI拡張機能がない場合。

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

formatオペランドは、XBD File Format Notation [...]で説明されているフォーマット文字列として使用されます。

ファイル形式の表記

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

また、Ubuntu 15.10とほとんどのディストリビューションはecho両方を次のように実装していることに注意してください。

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

混乱を招く可能性があります。


2

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


あなたが$string言っていることは何ですか?これは質問にどのように関連していますか?\n他の2つの回答のように、何が関係しないのですか?
ピーターモーテンセン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.