echo
コマンドに2つの問題があります。
簡潔にするために変数を拡張しました。
$ echo -e "test TEST test" | sed -e "s/TEST/\e[1;37mTEST\e[0m/g"
test e[1;37mTESTe[0m test
最初の問題:バックスラッシュは、sedマジックとシェルマジックの間のどこかで失われます。あなたはそれらを脱出する必要があります。
$ echo -e "test TEST test" | sed -e "s/TEST/\\e[1;37mTEST\\e[0m/g"
test e[1;37mTESTe[0m test
それでも動作しません。たぶんもっとエスケープ?
$ echo -e "test TEST test" | sed -e "s/TEST/\\\e[1;37mTEST\\\e[0m/g"
test \e[1;37mTEST\e[0m test
最後に、バックスラッシュが通過しています。なぜ3つのバックスラッシュが必要なのかわかりません。これは、奇妙なsedマジックです。
第二の問題:それecho -e
は無意味です。-e
バックスラッシュエスケープの解釈を有効にしますが、echo -e
解釈されるのはすべてです"test TEST test"
。バックスラッシュエスケープはsedから送られます。sedはそれらを気にせず、そのまま出力します。
あなたが欲しいのはこれです:
$ echo -e $(echo "test TEST test" | sed -e "s/TEST/\\\e[1;37mTEST\\\e[0m/g")
test TEST test
太字のTESTが出力されます。
変更された完全なスクリプトは次のとおりです。
#!/bin/bash
ColorOff='\\\e[0m' # Text Reset
BWhite='\\\e[1;37m' # Bold White
string="test TEST test"
echo -e $(echo "$string" | sed -e "s/TEST/${BWhite}TEST${ColorOff}/g")
echo -e "${BWhite}AAAA${ColorOff}"
「\ AAAA」を表示します。regular_color_constantsとSED_color_constantsを保持する必要があるので、それは残念です。実際、私はregular_color_constantsのみを使用し、エコーとsedオプションを修正して必要なものを取得します。