このシリーズの目的
長年LinuxとかAIXとかでコマンドライン操作やシェルを作ったりしていると、色々なテクニックが身についてきました。
せっかくなのでテクニックを公開していこうかと思い、書き始めます。
シリーズ1回目:エスケープ文字でかっこいい出力にできるんだ
コマンドラインの出力といえば、echoとかprintとかprintfとかを使っていると思います。
今回はechoを使って様々な出力方法について紹介していきます。
エスケープ文字は以下のようなものがあります。
\a | ベルを鳴らす |
\b | バック・スペース |
\e | エスケープ文字 |
\f | フォーム・フィールド文字 |
\n | 改行 |
\r | 復帰 |
\t | 水平タブ |
\v | 垂直タブ |
\c | 改行しない |
\数字 | 指定したASCIIコードの文字。数字は8進数3桁で表記する |
\x数字 | 指定したASCIIコードの文字。数字は16進数3桁で表記する |
以下は同じ結果出力になりますね。
「\n」の例
echo "こんにちは"
printf "こんにちは\n"
「\c」の例
echo "こんにちは\c"
printf "こんにちは"
ところで、本日の魔法の呪文は「 \033[ 」です。
この呪文をつかって、いろいろな出力方法を紹介します。
\033[ は \e[ と書けるOSもあります。この呪文(文字列)はエスケープと呼ばれる特殊文字です。
通常echoで文字出力する時は次のように書きます。
echo "こんにちは"
これを実行すると、「こんにちは」と表示されます。
では、次のように入力して実行してみましょう。
echo "\033[0;34mこんにちは\033[0m"
すると、「こんにちは」と表示されます。
なんと、色がつきましたね。
このように、文字を飾る時に\033[?mを使います。
?はデコレーション指定の数字、複数指定時はセミコロン(;)で区切る、最後にm(デコレーションですよフラグ)を付けます。
では、上記のechoコマンドを解説しましょう。
\033[0;34m ・・・ここから青色文字でっていう意味です。
\033[0m ・・・ここから色をリセットっていう意味です。
echoで表示する文字に色を付ける場合は、\033[色指定の数字m という指示を出します。
最後に\033[0mを書かないと、以降全ての表示が指定した色になってしまうので、最後のリセットはお忘れないように。
つまり、\033[?m ~ \033[0m までがデコレーションされます。
色は次のように定義されています。
Black 0;30 Dark Gray 1;30 Blue 0;34 Light Blue 1;34 Green 0;32 Light Green 1;32 Cyan 0;36 Light Cyan 1;36 Red 0;31 Light Red 1;31 Purple 0;35 Light Purple 1;35 Brown 0;33 Yellow 1;33 Light Gray 0;37 White 1;37
0;は省くことができます。
30番台は文字の色です。
これを40番台にすると、背景色になります。
Black 0;40 Dark Gray 1;40 Blue 0;44 Light Blue 1;44 Green 0;42 Light Green 1;42 Cyan 0;46 Light Cyan 1;46 Red 0;41 Light Red 1;41 Purple 0;45 Light Purple 1;45 Brown 0;43 Yellow 1;43 Light Gray 0;47 White 1;47
echo "\033[1;34;44mこんにちは\033[0m" ・・・AIXの場合 Linuxの場合はecho -e "\033[1;34;44mこんにちは\033[0m"
のような形式で背景と文字色を同時に指定できます。
文字に下線を書くには 4を指定。たとえば、 \033[4m
色の反転は 7を指定します。たとえば、 \033[7m
\033[を使ってカーソル位置指定もできます。
表示位置を指定できることから、対話式のコマンドを作成するときに役立ちます。
- カーソルの位置をY行X列に決める。
\033[<Y>;<X>H
- カーソルを Y 行上に動かす。
\033[<Y>A
- カーソルを Y 行下に動かす。
\033[<Y>B
- カーソルを X 列右に動かす。
\033[<X>C
- カーソルを X 列左に動かす。
\033[<X>D
- カーソルの位置を記憶する。
\033[s
- 記憶していたカーソルの位置に戻す。
\033[u
\033[を使って画面表示を消すこともできます。
\033[2J 画面クリア(clearコマンドと同じ) \033[K カーソル位置〜行末迄をクリア