Ci sono due problemi nel tuo echo
comando.
Ho ampliato le variabili per brevità.
$ echo -e "test TEST test" | sed -e "s/TEST/\e[1;37mTEST\e[0m/g"
test e[1;37mTESTe[0m test
Primo problema: le barre rovesciate si perdono da qualche parte tra magia sed e magia shell. Devi scappare da loro.
$ echo -e "test TEST test" | sed -e "s/TEST/\\e[1;37mTEST\\e[0m/g"
test e[1;37mTESTe[0m test
Non funziona ancora. Forse più in fuga?
$ echo -e "test TEST test" | sed -e "s/TEST/\\\e[1;37mTEST\\\e[0m/g"
test \e[1;37mTEST\e[0m test
Finalmente stanno arrivando le barre rovesciate. Non ho idea del perché abbiamo bisogno di tre barre rovesciate, questa è una strana magia sed.
Secondo problema: echo -e
è inutile. -e
abilita l'interpretazione delle fughe di backslash, ma tutto ciò che echo -e
viene interpretato è "test TEST test"
. Le fughe di backslash provengono da sed, a cui non importa di loro e le stampa crude.
Quello che vuoi è questo:
$ echo -e $(echo "test TEST test" | sed -e "s/TEST/\\\e[1;37mTEST\\\e[0m/g")
test TEST test
con grassetto TEST in uscita.
Ecco lo script completo con le modifiche:
#!/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}"
mostra `\ AAAA`. È un peccato, perché ho bisogno di mantenere regular_color_constants e SED_color_constants. In realtà, voglio avere solo regular_color_constants e correggere le opzioni echo e sed per ottenere quello che voglio.