Bashで太字のテキストを出力するにはどうすればよいですか?


241

画面にテキストを出力するBashスクリプトを書いています。

echo "Some Text"

テキストをフォーマットできますか?太字にしたいと思います。

回答:


427

これを行う最も互換性のある方法はtput、端末に送信する正しいシーケンスを見つけるために使用することです:

bold=$(tput bold)
normal=$(tput sgr0)

次に、変数$boldを使用して、$normal物事をフォーマットすることができます:

echo "this is ${bold}bold${normal} but this isn't"

与える

これは 太字ですが、そうではありません


2
それはかなり気の利いたです。私が正しく理解していれば、これはエスケープの挿入と同じですが、他の端末(VT100以外)でも機能します。
JamesRat、

正解です。TERMの値に従って適切なコードを検索します。
psmears 2010年

2
テキストに下線を引く必要がある場合は、変数を追加できます。バッククォートがコメントのフォーマットから削除されていることに注意してください。回答では同じ形式を使用します。UNDERLINE =tput smul
jayem 2013

3
tput多くの異なるタスクのためのコマンドがたくさんある素晴らしいコマンドです。
ドリュー

OPと同じようなことをしようとしていmotdますが、ファイルを使用しています。どのように/どこでそのインスタンスの$boldおよび$normal変数を定義しますか?
マット

74

文字列にスタイルを適用するには、次のようなコマンドを使用できます。

echo -e '\033[1mYOUR_STRING\033[0m'

説明:

  • echo -e -The-eオプションは、エスケープ(バックスラッシュ)された文字列が解釈されることを意味します
  • \ 033エスケープシーケンスはスタイルの開始/終了を表します
  • 小文字のmシーケンスの終わりを示します
  • 1太字属性(詳細は下記を参照)
  • [0m-すべての属性、色、フォーマットなどをリセットします

可能な整数は次のとおりです。

  • 0通常スタイル
  • 1太字
  • 2薄暗い
  • 斜体
  • 4下線
  • 5点滅
  • 7
  • 8-見えない

1
良い説明。機能が[0m提供するものを探し回っていたが、これはそれをうまく説明している
Jeremy

それはそうであるべきです\033[0m
ジェレミー

1
3-イタリック、少なくともコンソールでは
David Tabernero M.

取り消し線がUbuntuと他の人気のあるプラットフォームのいくつかでサポートされていればと願っています。
ダークスター1 2018

45

ユーザーがフォーマットのサポートを明示的にオフにしていないvt100互換端末でbashが実行されていると思います。

まず、オプションechoを使用して、で特殊文字のサポートをオンにし-eます。後で、次のESC[1mようなansiエスケープシーケンスを使用します。

echo -e "\033[1mSome Text"

たとえば、ここのansiエスケープシーケンスの詳細:ascii-table.com/ansi-escape-sequences-vt-100.php


ありがとう。エスケープシーケンスの他のリストをいくつか見つけましたが、リンクしたリストは非常に広範囲です!
JamesRat、

18
文字列の最後で太字の書式設定を停止することを忘れないでください。そうしないとecho -e "\033[1mSome Text\033[0m"、端末の次の行も太字になります
mems

このソリューションはPHP-CLIでも機能します。これは他のソリューションに対する利点です。
デビッド

覚えられない\033場合は、次の\eように使用できますecho -e "\e[1msome text\e[0m"
Felipe Alvarez

1
8進数のエスケープシーケンスはJS(JavaScript)で許可されています
Pat-Laugh

14

理論的にはそうです:

# BOLD
$ echo -e "\033[1mThis is a BOLD line\033[0m"
This is a BOLD line

# Using tput
tput bold 
echo "This" #BOLD
tput sgr0 #Reset text attributes to normal without clear.
echo "This" #NORMAL

# UNDERLINE
$ echo -e "\033[4mThis is a underlined line.\033[0m"
This is a underlined line. 

しかし実際には、「高輝度」色として解釈される場合があります。

(ソース:http : //unstableme.blogspot.com/2008/01/ansi-escape-sequences-for-writing-text.html

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.