管理者として、Linuxシステムを管理する際には、定期的にBashでechoコマンドを実行することがあります。しかし、テキストを表示すること以外に、echoコマンドが提供できるものはあるのでしょうか?
このチュートリアルでは、echoコマンドを詳しく見て、その中で最も役立つ実用的な例を学びます。
準備はいいですか?お楽しみにして、echoコマンドのアイデアを再構築しましょう!
前提条件
このチュートリアルは、実演を含んでいます。一緒に進めるためには、Ubuntuマシンが必要です。このチュートリアルではUbuntu 20.04を使用していますが、他のLinuxディストリビューションでも動作します。
echoコマンドを使用して文字列をBashシェルに表示する
echoコマンドについて考えると、まず思い浮かぶのは文字列の値をコンソールに表示することです。そうです、echoコマンドはコマンドやスクリプトから文字列を直接返します。
しかし、このチュートリアルの後半では、echoコマンドを別の視点で見てみます。今は、このコマンドがどのように文字列をコンソールに表示するかを見てみましょう。
echoコマンドの構文は次のようになります:
- string – 表示するテキストです。
- options – 出力を変更するために指定できるオプション引数です。
以下のechoコマンドをオプションなしで実行して、単純なテキストをコンソールに表示します。このコマンドでは、文字列をechoコマンドの引数として渡します。

文字列内の改行を抑制する
echoコマンドはデフォルトで各文字列の末尾に改行文字を追加します。その結果、複数の文字列を印刷すると、おそらく1つの文字列を別の文字列に接続すると、各文字列が新しい行に印刷されます。
-nオプションは、echoコマンドに末尾の改行を抑制するように指示し、複数の文字列を1行に印刷するようにします。たとえば、コンソールに進捗バーを印刷する際に、このオプションは役立ちます。
以下のコマンドを実行してProgress:と50%を印刷します。
下には、2つの文字列が改行で区切られているのが見えます。

今、次のコマンドを実行し、-nオプションを追加してProgress:と50%を印刷します。
以下のように、-nオプションを使用して改行を抑制したため、両方の文字列が1行に収まっています。

変数の値を印刷する
スクリプトを作成する際、通常は一時的に変数に値を格納し、その値をechoコマンドで印刷できます。これは、シェルスクリプトをデバッグする際に変数の値を確認するのに役立ちます。
以下のコマンドを実行して、number変数の値を10に設定し、その値をコンソールに印刷します。

エスケープシーケンスの解釈
エスケープシーケンスは特殊文字を表す一連の文字であり、-eオプションを使用してエスケープシーケンスを解釈できます。
例えば、\tエスケープシーケンスはタブ文字を表します。-eオプションを使用してコンソールに\tを出力すると、\tは文字通りに印刷されるのではなく、タブ文字として解釈されます。
最も一般的なエスケープシーケンスのいくつかは次のとおりです。
Escape Sequence | Function |
\b | backspace |
\t | tab |
\n | new line |
\\ | backslash |
\$ | dollar sign |
以下のコマンドを実行して、Hello\tWorldをコンソールに出力します。
下記のエコーコマンドが文字列Hello\tWorldをそのまま印刷したことがわかります。

次に、下記のコマンドを実行してHello\tWorldを出力し、-eオプションを追加して\tをタブ文字として解釈します。
下記のHelloとWorldの間に大きな隙間があることに注目してください。

新しい行に文字列を挿入する
長い単一の文字列を印刷すると、ユーザーはその全体を読むのに苦労します。幸いにも、\nオプションを使用すると、文字列の途中に改行文字を追加できます。このオプションは、テキストを複数行に印刷する際によく使用され、実際のテキストを明確にします。
下記のコマンドを実行して、文字列Echo command bash\nAnother lineを印刷し、\nオプションが文字列を2行に分割します。
下記では、\nオプションが文字列Another lineを新しい行に配置したことがわかります。

文字列間に垂直タブを挿入する
\tエスケープシーケンスが文字列間に水平タブ文字を配置する方法を見てきましたが、垂直タブはどうでしょうか?\vオプションを使用すると、文字列を垂直タブで区切ることができ、テキストバナーを作成するのに最適です。
このオプションは、テキストを複数の列に印刷する際によく使用され、各列が新しい行にあり、先頭に新しいタブスペースがある状態で表示されます。
以下のコマンドを実行して、テキスト「Echo command bash demo」を印刷しますが、各単語の間に垂直タブ(\v)を挿入します。

拡張子に基づいてファイル名を印刷する
特定のファイルタイプのファイルを見つける方法を探している場合、echoコマンドのこの機能は同じように機能します。echoコマンドはワイルドカード文字(*)を使用して、特定の拡張子を持つディレクトリ内のファイルをリストアップする機能をサポートしています。
1. 現在のディレクトリ内の拡張子が.txtで終わるすべてのファイルを印刷するには、次のコマンドを実行します。

2. 次に、現在のディレクトリ内の拡張子が.debファイルのファイルをすべて印刷するには、次のコマンドを実行します。

3. 最後に、次のコマンドを実行して、~/Downloadsディレクトリ内の.txt拡張子を持つファイルを印刷します。~/Downloads/をファイルの実際のディレクトリパスに置き換えることができます。
以下のように、echoコマンドはファイルが存在するディレクトリパスを指定する機能をサポートしています。

ファイルへの出力を書き込む
コマンドの結果が大量の場合、コンソール上で全てを読むことはほとんどできません。代わりに出力をファイルに書き込むことは素晴らしいアイデアです。しかし、どのようにしてファイルに書き込むのでしょうか?echoコマンドは、テキストをコンソールに表示するだけでなく、直接ファイルに出力することもサポートしています。
以下のコマンドを実行してください。このコマンドは出力を提供しませんが、出力はファイルecho-bash.txt に書き込まれます。
なお、echo-bash.txtというファイルが既に存在する場合、新しい内容で上書きされます。
次に、以下のcatコマンドを実行して、echo-bash.txtファイルの内容を表示してください。
以下のように、echoコマンドの出力がecho-bash.txtファイルに書き込まれていることがわかります。

既存のファイルに出力を追加する
先述のように、>演算子は既存のファイルを新しい内容で上書きします。しかし、上書きする代わりに既存のファイルに出力を追加したい場合はどうすればよいでしょうか?
>演算子の代わりに、二つの>>を使用します。この機能により、既存の内容を保持し、新しいエントリをファイルの末尾に追加することができます。
以下のコマンドを実行して、既存のecho-bash.txtファイルに新しいテキスト(Appending text)を追加してください。
次に、以下のcatコマンドを実行して、echo-bash.txtファイルの内容を表示してください。
以下のように、echoコマンドの出力が上書きせずにファイルに追加されていることがわかります。

結論
bashシェルのechoコマンドは、さまざまな方法で使用できるシンプルでパワフルなツールです。そして、このチュートリアルでは、echoコマンドの最も人気のあるオプションを使用してその潜在能力を最大限に活用する方法を学びました。
コンソールにテキストを出力するだけではなく、テキストの出力をファイルに書き込んだり、出力を追記したり、出力の見た目を変更する方法も見てきました。
なぜ、いくつかのechoコマンドの使用方法を選んで、それらをあなたのスクリプトに記述してみませんか?どんな創造的な方法が思いつくか試してみてください!