Bash - カラーコードを変数に保存する

Bash - カラーコードを変数に保存する

カラーテキストを変数に保存し、後でカラーで印刷する方法は?

私は100回の検索でこの質問に対する答えを見たことがありません。それはすべてPS1プロンプト、インラインprintf、またはls --colorのデータ使用に関するものです。変数に色を直接追加し、後で印刷する必要があります。

name="Hello"
name=$name"\e[36m\(Test\)\e[0m"
echo $name
printf $name

私が得た結果は次のとおりです。

Hello \e[36m(Test)\e0m

変数のデータに基づいて色は指定されません。
後で印刷するために変数にカラーコードを保存する方法Jaeden "Sifo Dyas" al'Raec Ruiner
に感謝します。

ベストアンサー1

echo -eBashには、printfとの3つのオプションがあります$'...'

最後のものが最も簡単です。

$ name="Hello"; name=$name$'\033[34m(Test)\e[0m' ; echo "$name"
Hello(Test)

この例では、カラーコードが変数に格納されています。色を見ることに加えてコードを「見る」最も簡単な方法は、16進ビューアを使用することです。

$ echo "$name" | od -vAn -tcx1
   H   e   l   l   o 033   [   3   5   m   (   T   e   s   t   )
  48  65  6c  6c  6f  1b  5b  33  35  6d  28  54  65  73  74  29
 033   [   0   m  \n
  1b  5b  30  6d  0a

コードを「確認」する必要がある場合(そしてそのコードが機能していないか動作しない理由)、それを使用してください。

カラーコードはvarの内側にあり、解釈されます。このようにして、特定の色の変数を生成して使用することができます。

$ blue=$'\033[34m'; reset=$'\033[0m'
$ echo "Hello $blue Test $reset Colors"

別のアプローチは、コードを変数に保存し、「効果」が必要なときはいつでも解釈することです。

$ blue='\033[34m'; reset='\033[0m'
$ echo "Hello $blue Test $reset Colors"
Hello \033[34m Test \033[0m Colors
$ echo -e "Hello $blue Test $reset Colors"
Hello  Test  Colors

「Test」は青、「Color」は黒です(コンソール画面が白の場合)。

このコマンドecho -eはprintfほど移植可能で安全ではありません。

$ blue='\033[34m'; reset='\033[0m'
$ printf "%s $blue%s $reset%s" "Hello" "Test" "Colors"
Hello Test Colors

フルカラーリスト(背景)は(印刷スペース)で表示されます。

 printf '\e[%sm ' {40..47} 0; echo

または前景色を使用します。

 printf '\e[%smColor=%s  ' {30..37}{,} 0 0; echo

おすすめ記事