LinuxでEchoコマンドを使用する方法

このechoコマンドは、フォーマットされたテキストをターミナルウィンドウに書き込むのに最適です。そして、それは静的なテキストである必要はありません。シェル変数、ファイル名、およびディレクトリを含めることができます。エコーをリダイレクトして、テキストファイルとログファイルを作成することもできます。方法については、この簡単なガイドに従ってください。

エコーはあなたが繰り返すように言うことを繰り返します

ゼウスは、オリンポス山を離れて美しいニンフと配偶するのが好きでした。ある旅行で、彼はエコーと呼ばれる山の精に、妻のヘラが彼について来たらウェイレイするように言いました。ヘラはゼウスを探しに来ました、そしてエコーはヘラと会話を続けるために彼女ができるすべてをしました。最後に、ヘラは気性を失い、貧しいエコーを呪ったので、他の誰かが言った最後の言葉だけを繰り返しました。彼女がゼウスに追いついたときにヘラがゼウスにしたことは誰の推測でもあります。

そして、それは、ほとんど、echo人生の多くです。繰り返すように言われたことを繰り返します。これは単純な機能ですが、重要な機能です。がないとecho、たとえばシェルスクリプトから目に見える出力を取得できません。

たくさんのベルやホイッスルが満載でechoはありませんが、あなたが知らなかった、または忘れていたいくつかの機能を備えている可能性は十分にあります。

エコー?エコー!

ほとんどのLinuxシステムは、の2つのバージョンを提供しますecho。Bashシェルには独自のecho組み込みがあり、のバイナリ実行可能バージョンechoもあります。

次のコマンドを使用すると、2つの異なるバージョンを確認できます。

タイプエコー
whereisエコー

このtypeコマンドは、引数として渡すコマンドがシェル組み込み、バイナリ実行可能ファイル、エイリアス、または関数のいずれであるかを示します。echoシェルが組み込まれていることを報告します。

答えが見つかるとすぐに、それtype以上の一致を探すのをやめます。したがって、同じ名前の他のコマンドがシステムに存在するかどうかはわかりません。しかし、それはそれが最初に見つけたものを教えてくれます。これは、そのコマンドを発行するときにデフォルトで使用されるものです。

このwhereisコマンドは、コマンドラインパラメーターとして渡すコマンドのバイナリ実行可能ファイル、ソースコード、およびマニュアルページを探します。個別のバイナリ実行可能ファイルがないため、シェルビルトインは検索されません。それらはBash実行可能ファイルの不可欠な部分です。

このwhereisコマンドechoは、/binディレクトリにあるバイナリ実行可能ファイルを報告します。

そのバージョンを使用するechoには、コマンドラインで実行可能ファイルへのパスを指定して明示的に呼び出す必要があります。

/ bin / echo --version

組み込みのシェルは、--versionコマンドライン引数が何であるかを認識していません。ターミナルウィンドウでそれを繰り返すだけです。

echo --version

ここに示す例はすべてecho、Bashシェルでデフォルトバージョンのを使用しています。

ターミナルへのテキストの書き込み

ターミナルウィンドウに単純なテキスト文字列を書き込むには、次のように入力しechoて表示する文字列を表示します。

エコー私の名前はデイブです。

テキストは私たちのために繰り返されます。しかし、実験してみると、物事が少し複雑になる可能性があることがすぐにわかります。この例を見てください:

エコー私の名前はデイブです。私はオタクです。

ターミナルウィンドウに> サインが表示され、  そこに座って待っています。Ctrl + Cを押すと、コマンドプロンプトに戻ります。何が起こったのですか?

「I'm」という単語の単一引用符またはアポストロフィは混乱していechoます。それは、その一重引用符をテキストの引用されたセクションの始まりとして解釈しました。終了の一重引用符を検出しなかったため、 echo追加の入力を待っていました。それは、それが待っていた欠落している一重引用符を含むさらなる入力を期待していました。

文字列に一重引用符を含めるための最も簡単な解決策は、文字列全体を二重引用符で囲むことです。

echo「私の名前はデイブです。私はオタクです。」

テキストを二重引用符で囲むことは、一般的なアドバイスとして適しています。スクリプトでは、渡すパラメータを明確に区切りますecho。これにより、スクリプトの読み取りとデバッグがはるかに簡単になります。

テキストの文字列に二重引用符を含めたい場合はどうなりますか?これは簡単\です。二重引用符の前に円記号を付けるだけです(間にスペースを入れないでください)。

echo「私の名前はデイブです。私は「オタク」です。」

これにより、「オタク」という単語が二重引用符で囲まれます。これらのバックスラッシュでエスケープされた文字の詳細は、まもなく表示されます。

エコーでの変数の使用

これまで、事前定義されたテキストをターミナルウィンドウに書き込んでいます。変数を使用しechoて、より動的で、シェルによって値が挿入された出力を生成できます。このコマンドで単純な変数を定義できます。

my_name = "Dave"

と呼ばれる変数my_nameが作成されました。「デイブ」というテキストの値が割り当てられています。に渡す文字列で変数名を使用でき、変数echo の値がターミナルウィンドウに書き込まれます。$変数名の前にドル記号を付けて、変数であることをecho知らせる必要があります。

注意点があります。文字列を一重引用符で囲んだ場合、echo すべてが文字通りに扱われます。変数の名前ではなく変数の値を表示するには、二重引用符を使用します。

echo '私の名前は$ my_nameです'
echo "私の名前は$ my_nameです"

やや適切に、それは繰り返す価値があります:

  • 一重引用符を使用すると、テキストが文字通りターミナルウィンドウに書き込まれます。
  • 二重引用符を使用 すると、変数が解釈され(変数展開とも呼ばれます)、がターミナルウィンドウに書き込まれます。

関連:Bashで変数を操作する方法

エコーでのコマンドの使用

コマンドを使用して、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 "これはテキストの長い行です\ n3行に分割されます\ n \ ttabs \ ton \ tthe \ tthird \ tline"

テキストは、\n文字を使用した新しい行に分割され、文字を使用した場所にタブが挿入されます\t

echo -e "Here \ vare \ vvertical \ vtabs"

\n改行文字と同様に、垂直タブ\vはテキストを下の行に移動します。ただし、\n 改行文字とは異なり、 \v垂直タブは列0から改行を開始しません。現在の列を使用します。

\bバックスペース文字はカーソルバックを1つの文字を移動します。端末に書き込むテキストがさらにある場合、そのテキストは前の文字を上書きします。

echo -e "123 \ b4"

「3」は「4」で上書きされます。

\rキャリッジリターン文字は、原因となる echo現在の行の先頭に戻るには、列ゼロから任意の更なるテキストを書くこと。

echo -e "123 \ r456"

「123」の文字は「456」の文字で上書きされます。

\a警告文字が可聴「ピー」を生成します 現在のテーマのデフォルトのアラート音を使用します。

echo -e "ブザー音を鳴らします\ a"

-n(改行なし)オプションでは、バックスラッシュでエスケープシーケンスではありませんが、テキストレイアウトの化粧品に影響を与えないので、ここでそれを説明します。echoテキストの最後に改行を追加するのを防ぎます。コマンドプロンプトは、ターミナルウィンドウに書き込まれたテキストの直後に表示されます。

echo-n「最後の改行なし」

ファイルとディレクトリでのエコーの使用

あなたはecho一種の貧乏人のバージョンとして使うことができますlsechoこのように使用する場合、選択肢はほとんどありません。何らかの忠実度や細かい制御が必要な場合はls、その多数のオプションを使用することをお勧めします。

このコマンドは、現在のディレクトリ内のすべてのファイルとディレクトリを一覧表示します。

エコー *

このコマンドは、名前が「D」で始まる現在のディレクトリ内のすべてのファイルとディレクトリを一覧表示します。

エコーD *

このコマンドは、現在のディレクトリにあるすべての「.desktop」ファイルを一覧表示します。

エコー* .desktop

ええ。これは、echoの強みを発揮していません。を使用しlsます。

エコーを使用したファイルへの書き込み

出力をリダイレクトして、echoテキストファイルを作成するか、既存のテキストファイルに書き込むことができます。

>リダイレクト演算子を使用する場合、ファイルが存在しない場合はファイルが作成されます。ファイルが存在する場合、からの出力echoはファイルの先頭に追加され、以前のコンテンツが上書きされます。

>>リダイレクト演算子を使用する場合、ファイルが存在しない場合はファイルが作成されます。からの出力echoはファイルの最後に追加され、ファイルの既存のコンテンツを上書きしません。

echo "新しいファイルを作成しています。" > sample.txt
echo "ファイルに追加しています。" >> sample.txt
cat sample.txt

最初のコマンドで新しいファイルが作成され、そのファイルにテキストが挿入されます。2番目のコマンドは、ファイルの最後に1行のテキストを追加します。このcatコマンドは、ファイルの内容をターミナルウィンドウに表示します。

もちろん、変数を含めて、ファイルに役立つ情報を追加することもできます。ファイルがログファイルの場合、タイムスタンプを追加する必要がある場合があります。次のコマンドでそれを行うことができます。

dateコマンドのパラメーターを一重引用符で囲んでいることに注意してください。これらは、パラメータ間のスペースがパラメータリストの終わりとして解釈されるのを防ぎます。これらは、パラメーターがdate 正しく渡されることを保証します 。

echo "ログファイルが開始されました:$(date + '%D%T')"> logfile.txt
cat logfile.txt

ログファイルが作成されcat、日付スタンプとタイムスタンプの両方がログファイルに追加されたことが示されます。

関連:Linuxのstdin、stdout、およびstderrとは何ですか?

それがエコーのレパートリーです

簡単なコマンドですが、不可欠です。もしそれが存在しなかったら、私たちはそれを発明しなければならないでしょう。

結局のところ、ゼウスのシェナニガンはいくつかの良いことをしました。