カラーテキストを変数に保存し、後でカラーで印刷する方法は?
私は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 -e
Bashには、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