シェルの出力カラーと制御についての深い理解

高洛峰
リリース: 2023-03-05 14:58:01
オリジナル
1425 人が閲覧しました

前書き

ls コマンドを使用してファイルを一覧表示すると、ファイルの種類ごとに異なる色で表示されることは誰もが知っています。では、このような色付きのテキスト出力を実現するにはどうすればよいでしょうか?シェルを使用するか C 言語を使用するかに関係なく、答えは複雑ではありません。

1.シェルでの実装方法

まずはシェルでの実装方法についてお話します。これは、echo コマンドで実現できます。次の例を参照してください。

echo -e "33[32mHello, world!"
ログイン後にコピー

このコマンドをターミナルに入力すると、システムが緑色で「Hello, world!」と出力するだけでなく、次のコマンド プロンプトがすべて緑色になりましたか?心配しないで、聞いてください。 echo コマンドの -e オプションは、端末によるバックスラッシュ エスケープ文字 (ie) の解釈を有効にします。引用符内の 33 は、特殊な文字シーケンスをガイドするために使用されます。ここでの機能は、次の [32m は前景色を緑色に設定することです。文字 m は設定された属性のカテゴリを表します。属性値。

設定は個別に使用できます。例:

echo -e "33[0m"
ログイン後にコピー

このコマンド行の機能は、属性をデフォルト値に復元することです。これは、0m 設定項目がデフォルト値を復元するために使用されることを意味します。現在、端末上ですべてが適切に動作していますか?

これらを理解したら、残りは簡単です。このコマンドを使用すると、テキストの前景色の設定に加えて、多くのプロパティも設定できます。

その他の設定項目は以下のとおりです:

33[0m 关闭所有属性
33[1m 设置高亮度
33[4m 下划线
33[5m 闪烁
33[7m 反显
33[8m 消隐
33[30m 至 33[37m 设置前景色
33[40m 至 33[47m 设置背景色
33[nA 光标上移n行
33[nB 光标下移n行
33[nC 光标右移n行
33[nD 光标左移n行
33[y;xH设置光标位置
33[2J 清屏
33[K 清除从光标到行尾的内容
33[s 保存光标位置
33[u 恢复光标位置
33[?25l 隐藏光标
33[?25h 显示光标
ログイン後にコピー

各番号が表す色は次のとおりです:

文字の背景色の範囲: 40----49

40: 黒

41:ダークレッド

42: グリーン

43: イエロー

44: ブルー

45: パープル

46: ダークグリーン

47: ホワイト

:30----- ------39

30: 黒

31: 赤

32: 緑

33: 黄

34: 青

35: 紫

36 : ダークグリーン

37: ホワイト

また、同じ種類の複数の設定項目をセミコロン (;) で区切って組み合わせることができます。

は次のとおりです:

echo -e "33[20;1H33[1;4;32mHello,world33[0m"
ログイン後にコピー

このコマンド行は、最初に 33[20;1H でカーソルをターミナルの 20 行目、列 1 に移動し、次に 33[1;4;32m でテキスト属性を強調表示に設定します。 、下線が引かれ、色は緑色になり、Hello, world が出力されます。最後に 33[0m により、ターミナルのプロパティがデフォルト値に復元されるため、コマンドの完了後にコマンド プロンプトが変更されたことがわかりません。

上記のコマンドを組み合わせることで、端末出力の複雑な制御を実現できます。

2. C プログラミングで実装するにはどうすればよいですか?

上記のシェルでの実装方法を理解した後、C で実装するのは非常に簡単です。上記の echo -e を置き換えるには printf 関数のみを使用する必要があると言えます。次の例を参照してください。

int color = 32;
 
printf("33[20;1H33[1;4;%dmHello, world.33[0m", color);
ログイン後にコピー

この例は、ここでの色の値を除いて、上記のシェルの最後の例と似ています。変数colorで指定します(もちろん直接指定することも可能です)。

3. Lenovo

これを見て、同様の方法を他のプログラミング言語でも端末出力を制御するために使用できるのではないかと疑問に思うかもしれません。答えは「はい」です!たとえば、Python では、出力は次のようになります。

color=32
 
print “33[20;1H33[1;4;%dHello, world.33[0m"%color
ログイン後にコピー

この例の効果は、上記の C の例と同じです。

概要

以上がこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に少しでもお役に立てれば幸いです。ご質問がございましたら、メッセージを残してご連絡ください。

シェルの出力カラーとコントロール関連の記事をさらに詳しく理解するには、PHP 中国語 Web サイトに注目してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート