echoは画面に文字列や数値、変数を表示するLinuxコマンドだ。
「エコー」と読み、そのまま繰り返す「こだま・反響」を意味するコマンドだ。
このページでは様々な表示方法とその応用を解説する。今まで使ってこなかった方もこの機会にぜひechoの使い方を覚えておいてほしい。
echoコマンドの基本
echoコマンドの基本動作
使い方は、次のとおりシンプルだ。
$ echo 表示するもの
画面に文字列を表示するにはこれだけだ。
画面にHello!という文字を表示する場合は、次のコマンドだ。
$ echo Hello!
Hello!の文字列が表示できた。
上記echoコマンドを試すなら下のコマンドをLinux上で実行すればすぐに再現可能だ。
以降も同様にLinux上で試すためのコマンドを一通り置いておくので、実際に叩いてみてほしい。
1 |
echo Hello! |
変数を表示する。
echoはコンピュータ内の変数の値を表示することができる。
まず、変数を設定する。「=」との間にスペースなどは入れない。
今回は変数aに1200という数字を格納する。
$ a=1200
変数の表示は、$に続けて変数名を入力する。
$ echo $変数名
変数aを表示する場合は、次のとおりだ。
$ echo $a
変数aの内容、1200が表示された。
1 2 |
a=1200 echo $a |
変数と文字列を同時に表示する
任意の文字列と変数を同時に表示することもできる。表示したい任意の文字列はそのまま、変数の部分は$に続けて変数名を入力する。
例えば、重量として単位を含めて表示したいのであれば、次のとおりだ。
$ echo weight $a g
weight 1200 gと表現された。
1 |
echo weight $a g |
変数を複数表示する
当然だが、同様に複数の変数を組み入れた表示もできる。
まずは、変数に値を格納する。
$ menu=coffee
さらに
$ price=500
例えば、変数の中身を注文内容のメニューと価格を表示したいのであれば、次のとおりだ。
$ echo order:$menu price:$price Yen
メニューと価格が表示された。
1 2 3 |
menu=coffee price=500 echo order:$menu price:$price Yen |
計算値を表示する
計算値を表示することもできる。計算値は「expr 計算式」で求め、exprを含めた計算式全体をバッククォーテーション「」で囲む。
多くのプログラミング言語と同じく、足し算は「+」、引き算は「-」、割り算は「/」を入力すればよい。
掛け算だけは「*」はワイルドカードという意味も持つので、そのままではエラーとなる。掛け算は「\*」と入力する。
まずは、変数に値を格納する。
$ n=5
例えば、変数の中身をメニューと個数と総計金額を表示したいのであれば、次のとおりだ。
$ echo Menu:$menu Number:$n price:
expr $price \* $n Yen
メニューと個数と単価が掛け合わせた値が計算され表示される。
1 2 |
n=5 echo Menu:$menu Number:$n price:`expr $price \* $n` Yen |
echoコマンドのオプションたち
コマンドの一覧
後から詳細をご紹介するが、まずは一覧で見てみよう。
オプション -e
改行を表示する
オプション -n
出力文字の最後の改行をしない
-eオプション:エスケープ文字を有効にする
コマンド入力時に使用できる文字の中で「\」(日本語キーボード上では¥マーク)は特殊な扱いになっており「エスケープ文字」と呼ばれている。このエスケープ文字と特定のアルファベットを組み合わせることで改行など様々な役割を持たせることができる。たとえば「\n」は改行の役割を持っている。
ただしそのまま書いただけでは改行はできず、オプション-eを使うことでエスケープ文字が有効となる。
改行したい箇所には「\\n」と入力する。
1 |
$ echo -e 1行目\\n2行目\\n3行目\\n4行目 |
\\nの位置で改行されている。
改行の「\\n」は、本来「\n」でよいが、コンピュータが「\n」を「n」としか認識できないので、「\」を一つ多く入力している。
1 |
$ echo -e "1行目\n2行目\n3行目\n4行目" |
のように「"」で表示文字全体を囲めば、「\n」でも認識する。
今度は\nの位置で改行されている。
「\」のような意味を持ち、表面上に見えるものとは違う動作をしている文字は数多くある。括弧やスペース、$などの記号もそうである。
これらの文字の扱いで混乱しないためには、表示文字全体を「"」で囲むこと意識しよう。
-nオプション:出力文字の最後の改行をしない
echoコマンドで出力すると、出力文字の最後に改行しているので、次の行頭にコマンドプロンプトが表示されるが、nオプションでこの改行を出力しないこともできる。
$ echo -n 出力文字
Hello!の次の改行を表示しないようにしてみよう。
$ echo -n Hello!
Hello!の次の改行が出力されないため、続けてコマンドプロンプトが表示される。
1 |
echo -n Hello! |
出力を画面ではなくファイルに出力する
echoコマンドは初期設定では画面に表示する。
画面ではなく、ファイルに出力することもできる。これはechoの機能というよりもリダイレクトと呼ばれるLinuxシェルの機能だ。
画面に表示されるものを、別のところに挿入できる。
echoコマンドで新規作成したファイルに出力する
echoコマンドで文字列をファイルに出力する場合は、>で出力するファイル名を指定する。
$ echo 文字列 > ファイル名
例えば簡単なスタイルシートを作るのであれば次のように入力すればよい。
$ echo "h1{font-size:20px;}" > style.css
ファイルstyle.cssが作成され、その内容として、「h1{font-size:20px;}」が書き込まれた。
1 2 |
echo "h1{font-size:20px;}" > style.css cat style.css |
echoコマンドでファイルに追記する
ファイルに文字列を追記するのであれば、次のように入力する。
$ echo 追記する文字列 >> ファイル名
先ほどのスタイルシートの2行目に2つ目のスタイルを追記する。
$ echo "h2{font-size:16px;}" >> style.css
ファイルstyle.cssの2行目に、「h2{font-size:16px;}」が追記された。
1 2 |
echo "h2{font-size:16px;}" >> style.css cat style.css |
クォーテーションの解釈のされ方
シングルクォーテーション「'」の場合
シングルクォーテーションの場合、中はすべて文字列であると解釈される。
例えば、「pwd」という文字列を$DIR変数に入れたとする。
$ DIR=pwd
これをシングルクォーテーションで囲んで出力すると「$DIR」という文字列が表示される。
ダブルクォーテーション「"」の場合
ダブルクォーテーションの場合は、変数が展開されて表示される。上記と同じ例を使うと、
$ echo "$DIR"
で「pwd」が表示される。
バッククォーテーション「」の場合
バッククォーテーションの場合、引用符内をコマンドであるとみなして、その実行結果と置き換える。変数も展開される。
$echo
$DIR
で「pwd」コマンドがそのまま実行される。
関連コマンド
最後にechoコマンドに関連して、基本的な画面表示のコマンドも紹介しておく。
unset
セットした変数を削除するにはunsetコマンドを利用する。
unset 変数名
で利用できる。
export
環境変数を定義するコマンド。「=」で定義したシェル変数は新しく起動したシェルから利用できないので、環境変数に設定する必要がある。
cat
ファイルの中身を標準出力するコマンドその他にも様々な使い方がある。詳細はリンク先のcatコマンドを参照。
clear
画面をクリアにし、入力をしやすくする。
まとめ
今回は、echoコマンドを使った画面出力とファイル出力方法を解説した。
変数の扱いや改行の表現方法は多くのプログラミング言語の出力にも応用できる内容だ。
echoコマンドを使った様々な出力方法は応用範囲が広い。ぜひ活用して欲しい。
計算値を表示することもできる。計算値は「expr 計算式」で求め、exprを含めた計算式全体をバッククォーテーション「
」で囲む。
バッククォーテーションが表示されていない。
バックスラッシュでダブルクォートをエスケープしないと正しく表示されないのでは。
ご指摘いただきありがとうございます。
クォート記号で文字コード表記をしなかった為に本文レイアウトが崩れた部分がありましたので訂正いたしました。
引き続き、ご愛読のほど、よろしくお願いいたします。
・echoを含め上記解説のコマンド等の記述で、'echo Hello!'のよう に頭に'$'を付けないとエラーになりますか?
・変数を表示する場合、'$ echo ${a}のように変数を「{}」で囲ま ないとエラーになりませんか?
いつもご愛読いただきありがとうございます。
本記事のコマンド解説の中で意味合いの違う「$」が出てきますので、確かに混乱を招くところがあるかもしれません。
【コマンドの頭にある「$」について】
実際にCentOS等でコマンド練習を始めようとして頂くとわかりやすいのですが、echoの前にある「$」はコマンドを入力する前から表示されている「今は一般ユーザーの権限でログイン中ですよ」という印です。スーパーユーザー(rootなど)でログイン中の場合には「$」が「#」に変わります。なので実際にここから入力していただく必要はございません。
【コマンドの途中にある「$」について】
コマンドの途中で出てくる「$」は「その直後にある文字列を変数として扱う」ための印です。
一例として「test」という文字列だけならファイル名やフォルダ名、あるいはコマンド名という可能性もありますが「$test」ならば必ず「testという名前の変数」であることがわかります。{}で囲む必要はありません。
返信ありがとうございます。ネット上のシェルの解説で、'変数にアクセスするときは「${変数}」のように変数名の前に「$」を付けて変数を「{}」で囲む必要があります。'と書かれていたのですが、変数にアクセスするときも「{}」で囲む必要はないということでしょうか?
・echo△${a}⇒誤り?
・echo△$a⇒正?(「{}」で囲む必要はない?)
いつもご愛読いただきありがとうございます。
実はここがコマンド記述の面白い所でもあるのですが、実はどちらでも問題ないのです。
ただし{}を使う理由はきちんとあって「どこからどこまでが変数名か分かりやすくなる」のが主な理由です。
【例】
$ hensu1=111111
$ hensu2=222222
まずは変数を2つ用意します。それぞれ中身は数字が6文字分ですね。
これを{}無し、有りでそれぞれechoしてみます。
$ echo $hensu1
111111
$ echo ${hensu1}
111111
もちろん、どちらも結果は同じです。
さて {}の活用事例ですが、echoコマンドでは変数の前後に自由に文字列を挟むことも出来ますので、
$ echo $hensu1から$hensu2まで
111111から222222まで
$ echo ${hensu1}から${hensu2}まで
111111から222222まで
こういった表記も出来ます。実行結果は同じですが、上の例ですと「$hensu1から$hensu2まで」のどこからどこまでが変数名か分かりずらいですよね。「$hensu」までが変数で「1から」という部分が文字かもしれません。下の例のように{}で囲めば「$hensu1」までが変数名であることがわかります。
返信ありがとうございます。よく分かりました。「分かりやすさ」
以外の点からすればどちらでも正しいということですね。
-e は正確には「改行を表示する」ではありません。
/bin/echo --help
...
-e バックスラッシュによるエスケープを解釈する
次の例では、タブ文字を表示します。
echo -e \t
いつもご愛読ありがとうございます。
記事に反映させていただきました。
ご指摘ありがとうございました。