GNU/Linux >> Linux の 問題 >  >> Linux

Bashシェルスクリプトで改行をエコーする方法

echoコマンドは、最後に新しい行を自動的に追加します。かっこいいです。

しかし、空の改行だけを表示したい場合はどうでしょうか。または、新しい行を含むものを出力したい場合は?

幸いなことに、echoでは改行文字\nを使用できます -eを使用する場合、同じ出力行内に新しい行を出力します オプション:

echo -e "Name\nAddress\nPhone Number"

上記のコマンドを実行すると、次の出力が得られます:

Name
Address
Phone Number

いいですねもっと詳しく見てみましょう。

改行は、現在の行が終了し、テキストが現在の行の下の行から続くことを指定するために使用する用語です。ほとんどの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コマンドを使用することをお勧めします。同じことをすることをお勧めしますが、自由に実験してください。


Linux
  1. シェル スクリプトのコマンド ライン パラメータ

  2. Linuxシェルスクリプトに新しい行を挿入するには?

  3. 方法:無制限の Bash/シェル履歴?

  1. バンをエコーする方法!?

  2. Bashシェルスクリプトで文字列を比較する方法

  3. bash の改行でテキストをエコーする

  1. cronシェルを変更する方法(shからBash)?

  2. 4 つのサンプル シェル スクリプトで説明されている Bash の特別なパラメーター

  3. 2 つのサンプル シェル スクリプトで説明されている Bash の位置パラメータ