Bashカラー出力に失敗しました

Bashカラー出力に失敗しました

sedやechoに問題がありますか?私は何が間違っていましたか?

$> cat ~/bin/color_test.sh 
#!/bin/bash

ColorOff='\e[0m'       # Text Reset
BWhite='\e[1;37m'      # Bold White

string="test TEST test"
echo -e "$string" | sed -e "s/TEST/${BWhite}TEST${ColorOff}/g"

$> ~/bin/color_test.sh 
test e[1;37mTESTe[0m test

太字で強調されたテストが予想されます。

ベストアンサー1

sed\eエスケープシーケンスとは見なされません。 GNU sedおよび他のほとんどのsed実装では、代替\eテキストの意味はです。代替テキストで移植可能に使用できる唯一のバックスラッシュエスケープ文字は、リテラルを意味するバックスラッシュです。 (区切り記号は)リテラルを表し、逆参照を表します。 。 GNU sedとBusyBox(OpenBSD sedを除く)は改行を追加します。したがって、sedコマンドの出力にはリテラルがあります。ses\\\&&\///\1\9\ne

Bashでは、最初からリテラルエスケープ文字を変数に簡単に追加できます。\e構文が認識するエスケープシーケンスの1つです$'…'

ColorOff=$'\e[0m'       # Text Reset
BWhite=$'\e[1;37m'      # Bold White

おすすめ記事