LinuxでEchoコマンドを使用する方法
- Dave McKay
@TheGurkha
- 2019年10月29日午前8時EDT
echo
コマンドは、フォーマットされたテキストをターミナルウィンドウに書き込むのに最適です。また、静的なテキストである必要はありません。シェル変数、ファイル名、およびディレクトリを含めることができます。エコーをリダイレクトして、テキストファイルとログファイルを作成することもできます。この簡単なガイドに従って、その方法を確認してください。
エコーは繰り返すように指示したことを繰り返します
ゼウスは、オリンポス山を離れて美しいニンフと配偶するのが好きでした。ある旅行で、彼はエコーと呼ばれる山の精に、妻のヘラが彼について来たらウェイレイするように言いました。ヘラはゼウスを探しに来ました、そしてエコーはヘラと会話を続けるために彼女ができるすべてをしました。最後に、ヘラは気性を失い、貧しいエコーを呪ったので、他の誰かが言った最後の言葉だけを繰り返しました。ヘラがゼウスに追いついたときにゼウスにしたことは、誰の推測でもあります。
そして、それはほとんど、echo
の人生の多くです。繰り返すように言われたことを繰り返します。これは単純な機能ですが、重要な機能です。 echo
がないと、たとえば、シェルスクリプトから目に見える出力を取得できません。
多数のベルやホイッスルがある場合、echo
に、知らなかった、または忘れてしまった機能がある可能性があります。
エコー? echo!
ほとんどのLinuxシステムは、2つのバージョンのecho
を提供します。 Bashシェルには独自のecho
が組み込まれており、echo
のバイナリ実行可能バージョンもあります。
次のコマンドを使用して、2つの異なるバージョンを確認できます。
type echo
whereis echo
type
コマンドは、引数として渡すコマンドがシェル組み込み、バイナリ実行可能ファイル、エイリアス、または関数のいずれであるかを示します。 echo
はシェルに組み込まれていると報告されています。
答えが見つかるとすぐに、type
はそれ以上の一致を探すのをやめます。したがって、同じ名前の他のコマンドがシステムに存在するかどうかはわかりません。しかし、それはそれが最初に見つけたものを教えてくれます。これは、そのコマンドを発行するときにデフォルトで使用されるものです。
whereis
コマンドは、バイナリ実行可能ファイル、ソースコード、およびマニュアルページを検索します。コマンドラインパラメータとして渡すコマンド。個別のバイナリ実行可能ファイルがないため、シェルビルトインは検索されません。これらはBash実行可能ファイルの不可欠な部分です。
whereis
コマンドは、echo
がバイナリ実行可能ファイルであることを報告します/bin
ディレクトリにあります。
そのバージョンのecho
を使用するには、次のように指定して明示的に呼び出す必要があります。コマンドラインでの実行可能ファイルへのパス:
/bin/echo --version
組み込みのシェルは、--version
コマンドライン引数は、ターミナルウィンドウで繰り返すだけです。
echo --version
ここに示す例はすべて、デフォルトを使用しています。 Bashシェル内のecho
のバージョン。
ターミナルへのテキストの書き込み
ターミナルウィンドウへの単純なテキスト文字列の書き込み、echo
と入力し、表示する文字列を入力します。
echo My name is Dave.
テキストが繰り返されます。しかし、実験してみると、物事が少し複雑になる可能性があることがすぐにわかります。この例を見てください:
echo My name is Dave and I"m a geek.
ターミナルウィンドウに>
記号が表示されますそこに座って待っていますCtrl + Cを押すと、コマンドプロンプトに戻ります。そこで何が起こったのですか?
「I’m」という単語の単一引用符またはアポストロフィはecho
を混乱させました。引用符で囲まれたセクションの始まりとしてその単一引用符を解釈しました。 echo
は、閉じている一重引用符を検出しなかったため、追加の入力を待機していました。さらに入力すると、待機していた欠落している一重引用符が含まれると予想されました。
文字列に一重引用符を含めるための最も簡単な解決策は、文字列全体を二重引用符で囲むことです。
echo "My name is Dave and I"m a geek."
テキストの折り返し二重引用符で囲むことは、一般的なアドバイスとして適しています。スクリプトでは、echo
に渡すパラメータを明確に区切ります。これにより、スクリプトの読み取りとデバッグがはるかに簡単になります。
テキストの文字列に二重引用符を含めたい場合はどうすればよいですか?簡単です。二重引用符の前にバックスラッシュ\
を付けます(間にスペースを入れないでください)。
echo "My name is Dave and I"m a \"geek.\""
これにより、「オタク」という単語が二重引用符で囲まれます。これらのバックスラッシュでエスケープされた文字は、まもなく表示されます。
エコーでの変数の使用
これまでのところ、ターミナルウィンドウに事前定義されたテキストを書き込んでいます。echo
で変数を使用して、より動的で、シェルによって値が挿入された出力を生成できます。このコマンドで単純な変数を定義できます:
my_name="Dave"
my_name
という変数が作成されました。テキスト「Dave」の値を割り当てました。 echo
に渡す文字列で変数名を使用でき、変数の値がターミナルウィンドウに書き込まれます。 echo
に変数であることを知らせるには、変数名の前にドル記号$
を付ける必要があります。
注意点があります。文字列を一重引用符で囲んだ場合、echo
はすべてを文字通り処理します。変数の名前ではなく変数の値を表示するには、二重引用符を使用します。
echo "My name is $my_name"
echo "My name is $my_name"
ある程度適切に、繰り返す価値があります。
- 一重引用符を使用すると、テキストが文字通りターミナルウィンドウに書き込まれます。
- 二重引用符を使用すると、次のようになります。解釈される変数(変数展開とも呼ばれます)と値がターミナルウィンドウに書き込まれます。
関連:Bashで変数を操作する方法
コマンドの使用echo
echo
でコマンドを使用し、その出力をターミナルウィンドウに書き込まれる文字列に組み込むことができます。コマンドが変数であるかのようにドル記号$
を使用し、コマンド全体を括弧で囲む必要があります。
dateコマンドを使用します。 。 1つのヒントは、echo
で使用を開始する前に、コマンドを単独で使用することです。そうすれば、コマンドの構文に問題がある場合は、echo
コマンドに含める前に、それを特定して修正する必要があります。次に、echo
コマンドが期待どおりに機能しない場合は、echo
構文に問題があるはずです。コマンドの構文はすでに証明されています。
ターミナルウィンドウでこれを試してください:
date +%D
そして、満足しています。 dateコマンドから期待するものを取得したら、それをecho
コマンドに統合します。
echo "Today"s date is: $(date +%D)"
コマンドは括弧内にあり、ドル記号$
は最初の括弧の直前にあることに注意してください。
エコーを使用したテキストのフォーマット
-e
(バックスラッシュエスケープを有効にする)オプションを使用すると、バックスラッシュエスケープされた文字を使用してテキストのレイアウトを変更できます。使用できるバックスラッシュエスケープ文字は次のとおりです。
それらの一部を使用して、その機能を確認しましょう。
echo -e "This is a long line of text\nsplit across three lines\nwith\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
は現在の行の先頭に戻ります。列0からさらにテキストを書き込みます。
echo -e "123\r456"
「123」文字は「456」文字で上書きされます。
\a
アラート文字は、可聴の「ブリープ」を生成します。現在のテーマのデフォルトのアラートサウンドを使用します。
echo -e "Make a bleep\a"
-n
(改行なし)オプションはバックスラッシュエスケープシーケンスではありませんが、テキストレイアウトの外観に影響するため、ここで説明します。これにより、echo
が追加されなくなります。テキストの最後に改行。コマンドプロンプトは、ターミナルウィンドウに書き込まれたテキストの直後に表示されます。
echo -n "no final newline"
ファイルとディレクトリでのechoの使用
echo
を並べ替えとして使用できますls
の貧乏人のバージョンの。このようにecho
を使用する場合、選択肢はほとんどありません。何らかの忠実度や細かい制御が必要な場合は、ls
とその多数のオプションを使用することをお勧めします。
このコマンドは、すべてのファイルと現在のディレクトリ内のディレクトリ:
echo *
このコマンドは、名前が「D」で始まる現在のディレクトリ内のすべてのファイルとディレクトリを一覧表示します:
echo D*
このコマンドは、現在のディレクトリにあるすべての「.desktop」ファイルを一覧表示します。
echo *.desktop
うん。これは、echo
の長所を発揮していません。 ls
を使用します。
エコーを使用したファイルへの書き込み
echo
そして、テキストファイルを作成するか、既存のテキストファイルに書き込みます。
>
リダイレクト演算子を使用する場合、ファイルが存在しない場合はファイルが作成されます。ファイルが存在する場合、echo
からの出力がファイルの先頭に追加され、以前のコンテンツが上書きされます。
>>
リダイレクト演算子。ファイルが存在しない場合は、ファイルが作成されます。 echo
からの出力はファイルの最後に追加され、ファイルの既存のコンテンツを上書きしません。
echo "Creating a new file." > sample.txt
echo "Adding to the file." >> sample.txt
cat sample.txt
最初のコマンドで新しいファイルが作成され、テキストが挿入されますそれに。 2番目のコマンドは、ファイルの最後に1行のテキストを追加します。 cat
コマンドは、ファイルの内容をターミナルウィンドウに表示します。
もちろん、変数を含めて、ファイルに役立つ情報を追加することもできます。ファイルがログファイルの場合、タイムスタンプを追加する必要がある場合があります。これは次のコマンドで実行できます。
date
コマンドのパラメーターを一重引用符で囲んでいることに注意してください。これらは、パラメータ間のスペースがパラメータリストの終わりとして解釈されるのを防ぎます。これにより、パラメーターがdate
に正しく渡されます。
echo "Logfile started: $(date +"%D %T")" > logfile.txt
cat logfile.txt
ログファイルが作成され、cat
は、日付スタンプとタイムスタンプの両方が追加されたことを示しています。
関連:Linuxのstdin、stdout、stderrとは何ですか?
これがechoのレパートリーです
単純なコマンドですが、必須です。もしそれが存在しなかったら、私たちはそれを発明しなければならないでしょう。
ゼウスのシェナニガンは、結局のところ、いくらか良いことをしました。
Dave McKayは、紙テープが流行したときに最初にコンピューターを使用し、それ以来プログラミングを続けています。 IT業界で30年以上働いた後、彼は現在、フルタイムのテクノロジージャーナリストです。彼のキャリアの間、彼はフリーランスのプログラマー、国際的なソフトウェア開発チームのマネージャー、ITサービスプロジェクトマネージャー、そして最近ではデータ保護責任者として働いてきました。 DaveはLinuxのエバンジェリストであり、オープンソースの支持者です。フルバイオを読む “