Mazn.net

やってみて 調べてみて 苦労しなけりゃ 箱は動かじ

echoコマンドで改行やタブを扱うには@Linux (Debian Etch)

      2013/07/15

UNIX系OSでも最も有名な部類に入るコマンドechoは、引数の文字列や変数の中身を表示することができます。つまりCでいうprintf、JAVAでいうSystem.out.printlnみたいなものですね。

# echo "hoge"
hoge

改行文字\nがあってもそのまま出力します。( 環境によっては、説明文は “\”  、コマンド例には”¥”と表示されますが、同じ文字です)

# echo "hoge\nhoge"
hoge\nhoge

-eオプションによって\nは改行として扱われます。(bashの場合。Debianのdashの場合は最下位の追記を参照)

# echo -e "hoge\nhoge"
hoge
hoge

ただし、ここで一つ注意。ダブルクォーテーション がないと\がbashで解釈されて認識されません。

# echo -e hoge\nhoge
hogenhoge

\をエスケープしてあげればダブルクォーテーションはいらなくなります。

# echo -e hoge\\nhoge
hoge
hoge

シェルスクリプトで文字列の入った変数を加工したりする場合はバグが混入してしまうため、注意が必要です。

例えばtmp.txtに以下の文字列が入っていたとします。

good job
abcdefg
hogehoge
good morning

この中から、goodが含まれる行をgrepで取り出して表示させようとしたシェル(tmp.sh)の例を示します。

#!/bin/bash
tmp=`grep good tmp.txt`
echo $tmp
echo
echo -e $tmp
echo
echo -e "$tmp"
echo

これを実行すると以下のようになります。

# ./tmp.sh
good job good morning

good job good morning

good job
good morning

-eオプションやダブルクォーテーションがないと、すべて1行で表示されているのがわかります。まだechoで表示するだけならよいですが、パイプ”|”で繋げて文字列を複雑に処理していると、わかりづらくなってしまいますね。

ちなみに-eオプションはタブ(\t)やベル(\b)といった制御文字も扱えるようです。

# echo -e "a\\tb"
a	b

↑ 余談ですが、HTMLでタブは”	”を半角で書くと表示できます。

 

== 2012/03/22 追記 ==

現在のDebianのデフォルトシェル (dash) は、echo の -e オプションが使えません。代わりに printf コマンドを使うしかありません。

# printf "hoge\nhoge"
hoge
hoge

ただし、echo と違って最終行が改行されません。よって、echo と同様に表示するには、

# printf "hoge\nhoge\n"

とする必要があります。

 - IT技術, プログラミング , , ,

336px

Message

メールアドレスが公開されることはありません。

  関連記事

no image
コンピュータ名でアクセスできるがIPでアクセスできない@Windows ファイル共有

タイトルのような事象がWindows のファイルの共有で発生しました。 コンピュ …

no image
or条件でのgrep

普段使ったことなかったので覚え書き。 grep で複数の文字列をor条件でマッチ …

no image
NICに複数のIPを付与する方法@Linux

1つのNICに複数のIPをつける方法の覚え書き。eth0にもう一つIP(192. …

no image
nForceのマザーM2NPV-VMでのRAID (NVRAID) の使用

数年前に買ったASUSのnForceのマザーボード M2NPV-VMで使っていた …

no image
USB3.0 メモリ (Super Talent Express DUO ST3U32EDB)

32GBのUSB3.0 のメモリが安かったので買ってみた。そろそろ東芝のUSB3 …

no image
オフラインファイルで特定のファイルの同期ができない

Windowsにはオフラインファイルという機能があります。この機能を用いることで …

no image
Windows 7 ファイルサーバにアクセスできない@Windows 7 Ultimate

Windows 7 をファイルサーバにしているのですが、ファイルアクセスが高負荷 …

no image
JBossのHypersonicSQL(hsql)管理ツール起動方法

JBossには気軽に使用できるHSQLが組み込まれています。ちょっとしたDBを使 …

no image
LXDEのスタートメニューのカスタマイズ@Ubuntu 14.04

menulibreというツールがあるので、これをリポジトリに追加してインストール …

no image
LVM覚え書き@Fedora14

LVMの使い方をすぐ忘れてしまうので、覚え書き。 LVM用のパーティションを用意 …