Bashスクリプトを使い始める初心者として、おそらく学習して使用する最初のコマンドはecho 指図。 printに似たbashエコーコマンドを考えることができます 他のプログラミング言語のコマンド。 echo コマンドはbashに組み込まれており、その目的は出力をstdout(つまり、ターミナル)に出力することです。
この記事では、bash echoコマンドとは何か、およびシェルスクリプトでそれを使用する方法を示します。トピックに入る前に、Bashのbulit-inと外部コマンドの違いを見てみましょう。
Bash組み込みエコーと外部エコーコマンド
Linuxおよびその他のUnixライクなシステムでは、一部のコマンドは組み込みコマンドと外部コマンドの両方として提供されます。たとえば、/bin/echo echoと同じ名前の外部コマンドです bashビルトイン。
組み込みコマンドと外部コマンドの両方として存在するコマンドを呼び出すと、通常、組み込みはデフォルトで実行されます。なぜなら、コマンド名の優先順位はaliasだからです。 、次にfunction 、次にbuiltin 、次に$PATHにリストされているディレクトリの外部コマンド 順番に。
組み込みコマンドと外部コマンドの両方として使用できる外部コマンドを強制する場合は、そのフルパスを使用するだけです。
これを明確にするために、次のコマンドはbashビルトインを呼び出します:
$ echo <some-text>
そして、以下は外部のechoを呼び出します コマンド:
$ /bin/echo <some-text>
コマンドが組み込みコマンドであるか外部コマンドであるかを確認するには、タイプを使用できます。 コマンド:
$ type echo echo is a shell builtin
指定された実行可能ファイルを含むすべての場所を表示するには、-aを使用します フラグ:
$ type -a echo echo is a shell builtin echo is /usr/bin/echo
typeの詳細については コマンドの使用法については、次のリンクを参照してください:
- 初心者向けの例を含むタイプコマンドチュートリアル
このガイド全体を通して、bashに組み込まれているechoについて説明します。 外部コマンドではなく、コマンド。
bashechoコマンドヘルプを表示する
そこにあるほとんどすべてのLinuxコマンドには、そのコマンドの使用方法を理解するためのマニュアルページまたはヘルプセクションがあります。 echoのヘルプマニュアル コマンドはBashのマニュアルページに含まれています
bashのマニュアルページにアクセスするには コマンド、実行:
$ man bash
ここで、/echoと入力します nを押します echoのヘルプセクションが表示されるまで コマンド。
または、次のワンライナーコマンドを使用して、echoのヘルプセクションを表示することもできます。 コマンド:
$ man bash | less --pattern='^ *echo +\['
echoコマンドの構造
echo コマンドは、3つのオプションの引数とstdoutに出力されるテキストを受け入れます。
echo [-neE] [arg ...] -n → Do not append a new line -e → enable interpretation of backslash escapes -E → disable the interpretation of backslash escapes (default)
今のところ3つのオプションの引数をスキップして、echoの使用方法を見てみましょう。 stdout(ターミナル)にテキストを印刷します。
次のコードをターミナルで直接実行するか、スクリプトファイルを作成して実行することができます。ターミナルで直接実行します:
$ echo "Hello World" Hello World
上記の例を見てください。これは、従来の hello world 新しい言語を学び、それを最初のコードとして実行するたびに実行するプログラム。 echo ここでのコマンドは"hello world"を受け入れます 引数としてテキストを出力し、端末(Stdout)に出力します。
改行文字を抑制する方法
bashのデフォルトの動作echo コマンドは、新しい行を自動的に追加します(\n )。同じhello worldを実行します もう一度プログラムして、ターミナルプロンプトが新しい行に表示されることに注意してください。
$ echo "Hello world" Hello world
この動作を抑制したい場合は、"-n"を使用できます。 改行を抑制するフラグとターミナルプロンプトは、以下に示すように同じ行に出力されます。
$ echo -n "Hello world" Hello world
引数が渡されない場合はどうなりますか
echoコマンドに引数が渡されない場合、コマンドは失敗しませんが、空の新しい行を返します。ターミナルを起動し、"echo"を実行します 空の行を出力して終了するだけです。
$ echo
$ echo $?
0
"-n"を追加することで、この動作をオーバーライドできます 引数が渡されなくても改行を出力しないフラグ。
$ echo -n
これはどこで役に立ちますか?不思議に思うかもしれません。出力の間に空の行が必要な場合は、echoを使用できます 引数なし。
変数とコマンドの操作
echo コマンドは、引数として渡されたユーザー定義変数またはシェル変数を解釈し、値を出力します。以下の例を見てください。
まず、環境変数"SHELL" echoに渡されます コマンドを実行すると、変数の値が出力されます。
# Environmental Variable:
$ echo " I am currently using ${SHELL}"
I am currently using /bin/bash
次に、ユーザー定義変数"NAME" echoに渡されます コマンドを実行すると、値が端末に出力されます。
# User Defined Variable:
$ NAME="PoP_OS"
$ echo "I am using ${NAME}"
I am using PoP_OS
引数内でコマンドを実行することもできます。 "uname -r"が存在する以下の例を見てください。 コマンドが引数として渡され、コマンドが解釈されて出力が出力されます。
$ echo "KERNEL_VERSION=$(uname -r)" KERNEL_VERSION=5.11.0-7620-generic
一重引用符と二重引用符を使用した場合の影響
これまでのすべての例で、引数を二重引用符で囲んでいることに気付いたかもしれません。では、引数が引用符で囲まれていない場合はどうなりますか?エコーコマンドは失敗せず、同じ出力が得られます。
次の例を見てください。前のセクションで使用したのと同じコマンドを実行していますが、引用符はなく、エラーなしで出力が出力されます。
$ echo I am using ${NAME}
I am using Pop_OS
良い習慣として、引数は常に引用符で囲んでください。
引数がプレーンテキストの場合は、一重引用符または二重引用符を使用できます。ただし、引数でコマンドを実行したり変数を展開したりする場合は、一重引用符ではなく、二重引用符を使用する必要があります。
一重引用符を使用すると、コマンドを実行したり、変数を展開したりできなくなります。引数全体をプレーンテキストとして扱うだけです。
以下の例を見てください。引数を一重引用符で囲むと、変数"NAME" テキストとして解釈および処理されません。
# SINGLE QUOTES
$ echo 'I am using ${NAME}'
I am using ${NAME}
# DOUBLE QUOTES
$ echo "I am using Linux ${NAME}"
I am using Linux PoP_OS
出力のリダイレクトと配管
前述のように、echo コマンドは、デフォルトで出力を標準出力(ターミナル)に出力します。シェルスクリプトを作成すると、echoの出力を保存する状況に陥る可能性があります。 ファイルへのコマンド。これは、bashリダイレクトを使用して行うことができます オペレーター。
$ echo "Welcome to OSTechNix" > /tmp/op.log
$ cat /tmp/op.log Welcome to OSTechNix
推奨される読み物:
- 例を使用して説明されたBashリダイレクト
- 初心者向けのBashヒアドキュメントチュートリアル
echoの出力を送信することもできます pipeへのコマンド さらなる処理のために。
$ echo "I am using ${NAME}"
I am using PoP_OS $ echo "I am using ${NAME}" | grep -i -o POP
PoP
複数行の文字列
あなたの議論は時々複数の行にスポーンするかもしれません。複数行の引数を二重引用符で囲んで、新しい行、タブ、スペースを考慮して出力を出力できます。
$ echo "This is Line 1
This is Line 2
This is Line 3"
場合によっては、引数が複数行の文字列として渡されても、1行として出力したい場合があります。このような場合は、 "\"を使用してください 各行の終わりに記号があるため、次の行は前の行に続きます。
$ echo "I am running \ the echo command \ again"
出力例:
I am running the echo command again
これは、bash echoに限定されているわけではありません。 指図。このアプローチを使用すると、非常に大きなコマンドを複数行に生成して読みやすくすることができます。
バックスラッシュは解釈をエスケープします
echo コマンドは、多くのエスケープ文字を引数として受け入れます。これらの特殊文字をechoコマンドで認識するには、 "-e" フラグを渡す必要があります。サポートされている特殊文字のリストは、echoから取得できます。 コマンドのマニュアルページ。
日常生活ですべての特殊文字を使用することはありません。ほとんどの場合、改行文字、タブ、および円記号のエスケープ文字を使用します。
改行文字-\n
\nを渡すと、新しい行が追加されます echoへ 指図。複数の\nを渡すこともできます。これにより、それに応じて行が追加されます。
$ echo -e "This is the first line\nThis is the second Line\nThis is the third line"
出力例:
This is the first line This is the second Line This is the third line
水平タブ-\t
\tの場合 を使用すると、タブスペースが追加されます。以下のように、複数のエスケープ文字を組み合わせることもできます。
$ echo -e "Enter the U_NAME\t:\n" Enter the U_NAME :
垂直タブ-\v
タブを垂直に作成するには、\vを使用します 。
$ echo -e "Enter the username\vEnter the password"
Enter the username
Enter the password 出力を抑制する-\c
\cの場合 \cの後に続くものはすべて使用されます 抑制されます。
$ echo -e "I am using \cCosmic Desktop" I am using
キャリッジリターン-\r
\rの場合 を使用すると、カーソルは最初の文字と\rの後に続く文字にリセットされます。 既存の文字を置き換えて印刷されます。
$ echo -e "I use Arch, \rBtw" Btwse Arch,
バックスラッシュを無効にすると解釈がエスケープされます
echoのデフォルトの動作 コマンドは、-eでない限り、特殊文字をプレーンテキストとして扱います。 フラグが渡されます。 -Eを使用しても、同じ動作を実現できます。 フラグ。
例を示します。
echoを実行させてください フラグなしのコマンド:
$ echo "Welcome to OSTechNix \nblog" Welcome to OSTechNix \nblog
次に、-Eを使用して同じコマンドを実行します フラグ:
$ echo -E "Welcome to OSTechNix \nblog" Welcome to OSTechNix \nblog
ご覧のとおり、echoを実行したときの結果は似ています。 -Eを使用したコマンド フラグとフラグなし。どちらの場合も、echo コマンドは/nを扱います プレーン文字列としての特殊文字。
同じコマンドをもう一度実行しますが、今回は-eを使用します フラグ。
$ echo -e "Welcome to OSTechNix \nblog"
Welcome to OSTechNix
blog
あなたは違いを見つけましたか? echoコマンドは/nを処理しませんでした 文字をプレーンテキストとして表示し、/nの後に続くものをすべて表示します 新しい行の特殊文字。
したがって、\nなどの特殊文字を使用する場合 、\t 、\v など、-eを使用する必要があります 国旗。それ以外の場合は、echo すべてをプレーンな文字列として扱います。
別の例をお見せしましょう。
$ echo -e "Hello world\nHello World\nHello World" Hello world Hello World Hello World
上記の出力にあるように、echo コマンドは"Hello World"を表示します 1つずつ(つまり、改行で)3回文字列を作成します。
特定の特殊文字だけをエスケープしたい場合はどうなりますか?これは、ダブルバックスラッシュの場所です (\\ )救助に来ます。
たとえば、3番目の/nをエスケープしたい 前のコマンドの特殊文字。
そのために、3番目の特殊文字の前に二重の円記号(\\)を付けます。 )以下のように:
$ echo -e "Hello world\nHello World\\\nHello World" Hello world Hello World\nHello World
さて、echo コマンドは3番目の\nを扱います プレーン文字列としての特殊文字。
したがって、特殊文字がたくさんあり、特定の特殊文字だけをエスケープしたい場合は、二重の円記号(\\)を追加する必要があります。 )その特殊文字の前。
結論
この記事では、echoが何であるかを見てきました コマンドは、それを使用するさまざまな方法です。これは非常に単純なコマンドであり、echoを使用しないとシェルスクリプトはありません。 printfを使用することにした場合を除き、コマンド これはechoの代替です bashのコマンド。
関連記事:
- Bashスクリプティング–例で説明されている変数
- Bashスクリプティング–例で説明されている関数
- Bashスクリプティング–例で説明されているForループ
- Bashスクリプティング–ループの説明中およびループまで