echoコマンドは、最後に新しい行を自動的に追加します。かっこいいです。
しかし、空の改行だけを表示したい場合はどうでしょうか。または、新しい行を含むものを出力したい場合は?
幸いなことに、echoでは改行文字\n
を使用できます -e
を使用する場合、同じ出力行内に新しい行を出力します オプション:
echo -e "Name\nAddress\nPhone Number"
上記のコマンドを実行すると、次の出力が得られます:
Name
Address
Phone Number
いいですねもっと詳しく見てみましょう。
エコーコマンドの-eフラグを使用して新しい行を表示する(推奨)
改行は、現在の行が終了し、テキストが現在の行の下の行から続くことを指定するために使用する用語です。ほとんどのUNIXライクなシステムでは、\n
改行を指定するために使用されます。改行文字と呼ばれます。
echoコマンドは、デフォルトで無効です。 バックスラッシュの解釈はエスケープします。したがって、「\ n」エスケープシーケンスを使用して改行を表示しようとすると、問題が発生します。
$ echo Hello\nworld
Hellonworld
$ echo 'Hello\nworld'
Hello\nworld
テキストを文字列リテラルとして一重引用符で囲むことも機能しません。
それは期待された出力ではありませんでした。実際に改行を出力するには、「-e」フラグを使用して、バックスラッシュエスケープの解釈を有効にすることをechoコマンドに通知できます。
$ echo -e 'Hello\nworld'
Hello
world
いいですね、それがあなたが探しているものです。
改行文字を表示する他の方法をいくつか教えてください。
文字列をbash変数に格納し、「-e」フラグを使用してエコーすることができます。
$ str="Hello\nworld"
$ echo -e $str
Hello
world
-eフラグの代わりに「$」文字を使用する
ドル記号「$」は、bashでは「拡張」文字と呼ばれます。これは、前の例でシェル内の変数の値を参照するために使用した文字です。
以下のスニペットをよく見ると、この場合、拡張文字が一時的な値を保持するように機能していることがわかります。
$ echo Hello$'\n'world
Hello
world
または、文字列全体を「一時変数」として使用できます:
$ echo $'Hello\nworld'
Hello
world
-e
を使用したい ただし、フラグ。
エコーをエコーして、新しい行で何かを印刷します
テキストの一部をエコーすると、echoコマンドはテキストの最後に改行を自動的に追加します(これを防ぐ方法は次のとおりです)。
これは、複数のエコーコマンドを連鎖させて改行を発生させることができることを意味します。
$ echo Hello; echo world
Hello
world
printfを使用してBashシェルで改行を印刷します
printfは、基本的にテキストを端末に出力するもう1つのコマンドラインツールですが、テキストをフォーマットすることもできます。
使用法は非常にシンプルでエコーに似ていますが、もう少し信頼性と一貫性があります。
$ printf 'Hello\nworld\n'
Hello
world
予想どおり、フラグを使用せずに改行があります。
個人的には、-eフラグを使用するか、出力に新しい行を表示するためにprintfコマンドを使用することをお勧めします。同じことをすることをお勧めしますが、自由に実験してください。