重要なポイント
- Echo は、シェル スクリプトから目に見える出力を取得できるようにする重要なコマンドであり、変数、ファイル名、ディレクトリを含めることができます。
- echo には 2 つのバージョンがあります。1 つは Bash シェルに組み込まれており、もう 1 つはバイナリ実行可能バージョンです。
- Echo を使用すると、ターミナル ウィンドウへのテキストの書き込み、動的出力のための変数の使用、コマンド出力の組み込み、バックスラッシュでエスケープされた文字によるテキストのフォーマット、ファイルとディレクトリの一覧表示、ファイルへの書き込みを行うことができます。
echo
コマンドは、フォーマットされたテキストをターミナル ウィンドウに書き込むのに最適です。また、静的テキストである必要はありません。シェル変数、ファイル名、ディレクトリを含めることができます。エコーをリダイレクトしてテキスト ファイルやログ ファイルを作成することもできます。その方法については、この簡単なガイドに従ってください。
エコーって何をするの?
エコーは
、繰り返すように指示された
ことを繰り返します。これは単純な機能ですが、重要な機能です。
echo
がなければ、たとえばシェル スクリプトから目に見える出力を取得することはできません。
多数の付加機能が搭載されているわけではありませんが、
echo
には、ユーザーが知らなかったり、忘れていた機能が含まれている可能性が十分にあります。
echo には 2 つのバージョンがあります
ほとんどの Linux システムでは、2 つのバージョンの
echo
が提供されます。
Bash シェル
には独自の
echo
が組み込まれており、
echo
のバイナリ実行可能バージョンもあります。
次のコマンドを使用して、2 つの異なるバージョンを確認できます。
タイプエコー
エコーはどこですか
type
コマンドは、
引数
として
渡したコマンドがシェル組み込み、バイナリ実行可能ファイル、エイリアス、または関数のいずれであるかを
示します。これは、
echo
シェル組み込みであることを報告します。
答えが見つかるとすぐに、
type
それ以上の一致の検索を停止します。したがって、システム内に同じ名前の他のコマンドが存在するかどうかはわかりません。ただし、どれが最初に見つかったかはわかります。これは、コマンドを発行するときにデフォルトで使用されるものです。
whereis
コマンドは、コマンドライン
パラメーター
として渡したコマンドのバイナリ実行可能ファイル、ソース コード、およびマニュアル ページを検索します。シェル組み込み関数は個別のバイナリ実行可能ファイルを持たないため、シェル組み込み関数は検索されません。これらは Bash 実行可能ファイルの不可欠な部分です。
whereis
コマンドは、
echo
が
/bin
ディレクトリにあるバイナリ実行可能ファイルであることを報告します。
そのバージョンの
echo
を使用するには、コマンド ラインで実行可能ファイルへのパスを指定して明示的に呼び出す必要があります。
/bin/echo --バージョン
シェル組み込み関数は
--version
コマンドライン引数が何であるかを認識せず、ターミナル ウィンドウでそれを繰り返すだけです。
echo --バージョン
ここに示す例はすべて、Bash シェルのデフォルト バージョンの
echo
使用しています。
エコーを使用してターミナルにテキストを書き込む
単純なテキスト文字列をターミナル ウィンドウに書き込むには、
echo
と表示する文字列を入力します。
エコー 私の名前はデイブです。
このテキストは私たちに向けて繰り返されます。しかし、実験してみると、状況が少し複雑になる可能性があることがすぐにわかります。この例を見てください。
echo 私の名前はデイブ、オタクです。
ターミナル ウィンドウには
>
記号が表示され、そこに座って待機しています。 Ctrl+C を押すとコマンド プロンプトに戻ります。そこで何が起こった?
「I’m」という単語内の単一引用符またはアポストロフィは、
echo
を混乱させます。その一重引用符がテキストの引用部分の始まりとして解釈されました。終了一重引用符が検出されなかったため、
echo
さらなる入力を待機していました。待機していた欠落している一重引用符を含むさらなる入力が期待されていました。
文字列に一重引用符を含める最も簡単な解決策は、文字列全体を二重引用符で囲むことです。
echo 「私の名前はデイブ、オタクです。」
テキストを二重引用符で囲むことは一般的なアドバイスです。スクリプトでは、
echo
に渡すパラメータを明確に区切ります。これにより、スクリプトの読み取りとデバッグがはるかに簡単になります。
テキスト文字列に二重引用符を含めたい場合はどうすればよいでしょうか?それは簡単です。二重引用符の前にバックスラッシュ
\
を置くだけです (間にスペースは入れません)。
echo 「私の名前はデイブ、「オタク」です。」
これにより、「geek」という単語が二重引用符で囲まれます。これらのバックスラッシュでエスケープされた文字が間もなくさらに登場する予定です。
echo での変数の使用
これまでは、事前定義されたテキストをターミナル ウィンドウに書き込んでいました。
echo
で変数を使用すると、より動的で、シェルによって値が挿入された出力を生成できます。次のコマンドで単純な変数を定義できます。
my_name="デイブ"
my_name
という変数が作成されました。これには、テキスト「Dave」の値が割り当てられています。
echo
に渡す文字列で変数名を使用すると、変数の値がターミナル ウィンドウに書き込まれます。変数名の前にドル記号
$
を付けて、それが変数であることを
echo
に知らせる必要があります。
注意事項があります。文字列を一重引用符で囲んだ場合、
echo
すべてを文字通りに扱います。変数名ではなく変数値を表示するには、二重引用符を使用します。
echo '私の名前は $my_name です'
エコー「私の名前は$my_nameです」
ある程度適切ですが、これは繰り返す価値があります。
- 一重引用符を使用すると、テキストがリテラル形式で端末ウィンドウに書き込まれます。
- 二重引用符を使用すると、変数が解釈され (変数展開とも呼ばれます)、値がターミナル ウィンドウに書き込まれます。
echo を使用したコマンドの使用
echo
を使用してコマンドを使用し、その出力をターミナル ウィンドウに書き込まれる文字列に組み込むことができます。コマンドが変数であるかのようにドル記号
$
を使用し、コマンド全体を括弧で囲む必要があります。
date コマンドを
使用します。 1 つのヒントは、コマンドを
echo
で使用する前に、単独で使用することです。こうすることで、コマンドの構文に問題がある場合、
echo
コマンドに含める前にそれを特定して修正できます。その後、
echo
コマンドが期待どおりに動作しない場合は、コマンドの構文がすでに証明されているため、問題は
echo
構文にあることがわかります。
そこで、ターミナル ウィンドウでこれを試してください。
日付 +%D
そして、date コマンドから期待どおりの結果が得られたことに満足したら、それを
echo
コマンドに統合します。
echo "今日の日付は $(date +%D)"
コマンドは括弧内にあり、ドル記号
$
最初の括弧の直前にあることに注意してください。
エコーを使用したテキストの書式設定
-e
(バックスラッシュ エスケープを有効にする) オプションを使用すると、バックスラッシュでエスケープされた文字を使用してテキストのレイアウトを変更できます。使用できるバックスラッシュでエスケープされた文字は次のとおりです。
- \a : アラート (歴史的には BEL として知られています)。これにより、デフォルトの警告音が生成されます。
- \b : バックスペース文字を書き込みます。
- \c : それ以降の出力を放棄します。
- \e : エスケープ文字を書き込みます。
- \f : フォーム フィード文字を書き込みます。
- \n : 新しい行を書き込みます。
- \r : 改行を書き込みます。
- \t : 水平タブを書き込みます。
- \v : 垂直タブを書き込みます。
- \\ : バックスラッシュ文字を書き込みます。
それらのいくつかを使用して、それらが何をするかを見てみましょう。
echo -e "これは長いテキスト行です\n\n\n\n\t3 行目\n\n3 行に分割されています"
テキストは、
\n
文字を使用した新しい行に分割され、
\t
文字を使用した位置にタブが挿入されます。
echo -e "ここ\vare\vvertical\vtabs"
\n
改行文字と同様、垂直タブ
\v
はテキストを下の行に移動します。ただし、
\n
改行文字とは異なり、
\v
垂直タブは列 0 から改行を開始しません。現在の列を使用します。
\b
バックスペース文字はカーソルを 1 文字戻します。端末にさらに書き込むテキストがある場合、そのテキストは前の文字を上書きします。
echo -e "123\b4"
「3」は「4」で上書きされます。
\r
キャリッジ リターン文字により、
echo
現在の行の先頭に戻り、列 0 からさらにテキストを書き込みます。
echo -e "123\r456"
「123」文字は「456」文字で上書きされます。
\a
アラート文字は「ピー」という音を鳴らします。現在のテーマのデフォルトの警告音を使用します。
echo -e "ピー音を鳴らします\a"
-n
(改行なし) オプションはバックスラッシュでエスケープされたシーケンスではありませんが、テキスト レイアウトの外観に影響を与えるため、ここで説明します。これにより、
echo
テキストの末尾に改行を追加するのを防ぎます。コマンド プロンプトは、ターミナル ウィンドウに書き込まれるテキストの直後に表示されます。
echo -n "最後の改行なし"
ファイルとディレクトリでの echo の使用
echo
、
ls
の貧乏人版として使用できます。このように
echo
使用する場合、選択肢はほとんどありません。何らかの忠実度や細かい制御が必要な場合は、
ls
と
その多数のオプションを
使用することをお勧めします。
このコマンドは、現在のディレクトリ内のすべてのファイルとディレクトリを一覧表示します。
エコー *
このコマンドは、現在のディレクトリ内の名前が “D” で始まるすべてのファイルとディレクトリを一覧表示します。
エコーD*
このコマンドは、現在のディレクトリ内のすべての「.desktop」ファイルを一覧表示します。
エコー *.デスクトップ
うん。これは
echo
の強みを活かすものではありません。
ls
使用します。
エコーを使用したファイルへの書き込み
echo
からの出力をリダイレクトして、テキスト ファイルを作成するか、既存のテキスト ファイルに書き込むことができます。
>
リダイレクト演算子を使用すると、ファイルが存在しない場合は作成されます。ファイルが存在する場合、
echo
からの出力がファイルの先頭に追加され、以前の内容が上書きされます。
>>
リダイレクト演算子を使用すると、ファイルが存在しない場合は作成されます。
echo
からの出力はファイルの末尾に追加され、ファイルの既存の内容は上書きされません。
echo "新しいファイルを作成しています。" > サンプル.txt
echo "ファイルに追加しています。" >> サンプル.txt
猫のサンプル.txt
最初のコマンドによって新しいファイルが作成され、そこにテキストが挿入されます。 2 番目のコマンドは、ファイルの最後にテキスト行を追加します。
cat
コマンドは、ファイルの内容を端末ウィンドウに表示します。
もちろん、変数を含めて、ファイルに有用な情報を追加することもできます。ファイルがログファイルの場合は、タイムスタンプを追加したい場合があります。次のコマンドでそれを行うことができます。
date
コマンドのパラメータを一重引用符で囲んでいることに注意してください。これらは、パラメータ間のスペースがパラメータ リストの終わりとして解釈されるのを防ぎます。これらは、パラメーターが
date
まで正しく渡されることを保証します。
echo "ログファイルが開始されました: $(date +'%D %T')" > logfile.txt
猫のログファイル.txt
ログファイルが作成され、
cat
日付スタンプとタイムスタンプの両方がログファイルに追加されたことを示しています。
それがエコーのレパートリーです
単純なコマンドですが、不可欠です。それが存在しないなら、私たちはそれを発明しなければなりません。





