echoコマンドで改行やタブを扱うには@Linux (Debian Etch)
Posted on 1 月 6th, 2009 by mazn
UNIX系OSでも最も有名な部類に入るコマンドechoは、引数の文字列や変数の中身を表示することができます。つまりCでいうprintf、JAVAでいうSystem.out.printlnみたいなものですね。
# echo "hoge" hoge
改行文字\nがあってもそのまま出力します。
# echo "hoge\nhoge" hoge\nhoge
-eオプションによって\nは改行として扱われます。
# 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/bashtmp=`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でタブは”	”を半角で書くと表示できます。
Discussion Area - Leave a Comment