\r\n\r\n
echoコマンドは、ターミナルウィンドウにフォーマットされたテキストを書き込むのに適しています。静的なテキストである必要はありません。シェル変数、ファイル名、ディレクトリを含めることができます。また、echoをリダイレクトして、テキストファイルやログファイルを作成することもできます。この簡単なガイドに従って、その方法を確認してください。
ゼウスはオリンポス山を出て、美しいニンフと交際するのが好きだった。ある旅の途中、エコーという山の妖精に、妻のヘラが後を追ってきたら止めるようにと言ったそうです。ヘラはゼウスのもとにやってきて、エーコはヘラとの会話を続けるために、あらゆる手を尽くした。結局、ヘラは怒りに任せて、エーコを罵倒し、他の者が最後に話した言葉だけを繰り返させた。ヘラはゼウスに追いついたとき、何をしたか、それは誰にもわからない。
そしてこれが、大きくはエコーの宿命なのです。繰り返せと言われたことを繰り返す。シンプルな機能ですが、非常に重要な機能です。例えば、echoがなければ、シェルスクリプトから目に見える出力を得ることはできない。
しかし、エコーには、あなたが知らない、あるいは忘れていた機能がある可能性があります。
ほとんどのLinuxシステムでは、2つのバージョンのechoが提供されています。bashshellは独自のechoを内蔵しており、バイナリ実行可能なバージョンのechoがあります。
以下のコマンドで、2つの異なるバージョンを確認することができます。
type echo whereis echotypeコマンドは、引数として渡されたコマンドが、シェル組み込み型、バイナリ実行型、エイリアス、関数のどれであるかを教えてくれます。エコーがシェルの組み込みであることを報告してくれるのです。
答えが見つかると、typeはそれ以上のマッチングを探すのを止めます。だから、システム内に同じ名前のコマンドが他にあるかどうかはわからない。でも、どっちが先に見つけたかはわかるんですよ。これは、コマンドを発行する際に、デフォルトで使用するコマンドです。
whereisコマンドは、コマンドライン引数として渡されたコマンドのバイナリ実行ファイル、ソースコード、マニュアルページを探します。シェルビルトインには個別のバイナリ実行ファイルがないため、検索は行いません。これらは、Bashの実行ファイルと不可分の部分です。
whereisコマンドは、echoを/binディレクトリにあるバイナリ実行ファイルとして報告します。
このバージョンの echo を使用するには、コマンドラインで次のように実行ファイルのパスを指定して明示的に呼び出す必要があります。
/bin/echo --versionシェルはコマンドライン引数 --version が何であるかを内蔵しておらず、単に以下のようにターミナルウィンドウに繰り返し表示するだけである。
echo --versionここに示す例は、すべてbashshellのデフォルトバージョンのechoを使用しています。
単純な文字列を端末ウィンドウに書き込むには、echoと表示したい文字列を入力します。
echo My name is Dave.しかし、実際に実験してみると、少し複雑になっていることに気づくだろう。
echo My name is Dave and I'm a geek.ターミナルウィンドウは>フラグを表示し、そこで待機しています。ctrl+cでコマンドプロンプトに戻りますが、そこで何が起こるのでしょうか?
の逆コンマまたはアポストロフィ1個は混乱を意味する。アポストロフィを引用部分の先頭と解釈します。終了アポストロフィを検出しないため、echoはさらなる入力を待っています。さらに入力されたアポストロフィが含まれることを期待し、待機している。
文字列の中にシングルクォートを含めるには、文字列全体をダブルクォートで囲むのが最も簡単な方法です。
echo "My name is Dave and I'm a geek."テキストをダブルインバーテッドコンマで囲むのは良い提案です。スクリプトの中では、echoに渡す引数を明確に修飾しています。これにより、スクリプトを読んだり、デバッグしたりするのが非常に簡単になります。
文字列の中にダブルクォートを含めたい場合は?簡単です、二重引用符の前にバックスラッシュ(second)を入れるだけです(間にスペースは入れません)。
echo "My name is Dave and I'm a \"geek.\""このバックスラッシュ・エスケープ文字については、後ほど詳しく説明します。
これまでは、あらかじめ定義されたテキストをターミナルウィンドウに書き込んでいました。echoで変数を使ってよりダイナミックな出力を生成し、シェル経由でその中に**の値を入れることができるのです。このコマンドで簡単な変数を定義することができる。
my_name="Dave"myếts u nameという変数が作成されました。echoに渡す文字列の中で変数名を使えば、その変数の値が端末のウィンドウに書き込まれる。echo に変数であることを認識させるには、変数名の前にドル記号 $ を付ける必要があります。
注意書きがあります。文字列をシングルクォートで囲むと、echo はすべてを文字通りに処理します。変数名ではなく、変数値を表示する場合は、二重引用符を使用します。
echo 'My name is $my_name' echo "My name is $my_name"やや適確で、繰り返しになるが。
関連:Bashで変数を使用する方法
echoを使ったコマンドで、その出力を端末のウィンドウに書き出す文字列にマージすることができるのです。コマンドを変数に見立ててドル記号の$を使い、コマンド全体を括弧で囲む必要があります。
ここでは、dateコマンドを使用します。コツとしては、echoと一緒に使う前に、コマンド単体で使うことです。こうすることで、もしコマンドの構文に問題があったとしても、それを特定し、echoコマンドに含める前に修正することができます。そうすれば、echoコマンドを使っても思ったような効果が得られない場合、コマンドの構文が証明されたので、echoの構文に問題があるのだろうとわかるでしょう。
そのため、ターミナルウィンドウで以下を試してみてください。
date +%Dそして、dateコマンドに期待する結果が得られれば満足ということで、echoコマンドに統合することにします:。
echo "Today's date is: $(date +%D)"なお、コマンドは大括弧で囲まれ、最初の大括弧の直前にはドル記号の$が表示されます。
e (enable backslash escaping) オプションにより、いくつかのバックスラッシュエスケープ文字を使用して、テキストのレイアウトを変更することができます。バックスラッシュのエスケープ文字は、以下のものが使用可能です。
そのいくつかを使って、どんなことができるのかを見てみましょう。
echo -e "This is a long line of text\nsplit across three lines\nwith\ttabs\ton\tthe\tthird\tline"テキストが改行されます。このとき、"Ⓐ"が使用され、"Ⓑ"がタブとして使用されます。
echo -e "Here\vare\vvertical\vtabs"改行文字と同様に、垂直タブはテキストを下の行に移動させます。ただし、改行文字とは異なり、垂直タブは0列目から新しい行を開始することはありません。現在のカラムを使用します。
端末に書き込む文字がある場合は、その文字が前の文字を上書きします。
echo -e "123\b4""3 "は "4 "に書き換えられました。
キャリッジリターンキャラクターは、エコーを現在の行の先頭に戻し、0列目以降にテキストを追加して書き込みます。
echo -e "123\r456"123 "文字が "456 "文字に上書きされます。
この警告音は、現在のトピックのデフォルトの警告音を使用します。
echo -e "Make a bleep\a"n(改行なし)オプションはバックスラッシュのエスケープシーケンスではありませんが、テキストレイアウトの外観に影響を与えるので、ここで説明します。echoがテキスト末尾に改行を追加するのを防ぐことができます。ターミナルウィンドウに書き込まれたテキストの直後に、コマンドプロンプトが表示されます。
echo -n "no final newline"echo は ls の貧乏人版とでもいうべきもので、このような使い方をする場合、選択肢はほとんどありません。もし、何らかの忠実度や細かい制御が必要な場合は、lsとその膨大なオプションを使用するのがベストです。
このコマンドは、現在のディレクトリにあるすべてのファイルとディレクトリの一覧を表示します。
echo *カレントディレクトリにある、名前が "D "で始まるすべてのファイルとディレクトリの一覧を表示します。
echo D*このコマンドは、カレントディレクトリにあるすべての ".desktop" ファイルを一覧表示します。
echo *.desktopはい、これはechoの強みを生かしたものではありません。
echoの出力をリダイレクトしたり、テキストファイルを作成したり、既存のテキストファイルに書き込んだりすることができます。
リダイレクト演算子 > を使用した場合、ファイルが存在しない場合は作成されます。ファイルが存在する場合、echoの出力はファイルの先頭に追加され、以前の内容を上書きします。
リダイレクト演算子 > > を使用すると、ファイルが存在しない場合に作成されます。 echo の出力はファイルの最後に追加され、ファイルの既存の内容を上書きすることはありません。
echo "Creating a new file." > sample.txt echo "Adding to the file." >> sample.txt cat sample.txt最初のコマンドは、テキスト ** を含む新しいファイルを作成します。2番目のコマンドは、ファイルの末尾に1行を追加するコマンドです。 catコマンドは、ファイルの内容をターミナルウィンドウに表示します。
もちろん、変数を入れて、ファイルに有用な情報を追加することも可能です。ファイルがログファイルである場合、タイムスタンプを追加する必要があるかもしれません。次のコマンドで実現できます。
日付コマンドのパラメーターを1つの逆カンマで囲んでいることに注意してください。引数間のスペースが引数リストの終わりと解釈されるのを防ぐためである。これらは、引数が現在の日付に正しく渡されることを保証するものである。
echo "Logfile started: $(date +'%D %T')" > logfile.txt cat logfile.txt私たちのログファイルは私たちのために作成され、日付スタンプとタイムスタンプがログファイルに追加されることをcatは教えてくれます。
関連:Linuxのstdin, stdout, stderrとは何ですか?
シンプルな命令ですが、なくてはならないものです。もしこれがなければ、私たちが発明しなければならないでしょう。
やはり、ゼウスの悪戯には何かあるのでしょう。