「-e」オプションや中間変数なしでカラーメッセージを「エコー」する方法は?

「-e」オプションや中間変数なしでカラーメッセージを「エコー」する方法は?

echo処理(およびその他のコマンド)時に動作を理解するのは本当に困難です。ANSIエスケープコードカラーメッセージを印刷します。

次のオプションが利用可能であることがわかります-e

echo -e "\e[32m FOO \e[0m"

私のメッセージは正常に着色されます。

echo -eまた、出力を変数に割り当ててから、新しいechoコマンドでその変数を再利用できることもわかりました。-eオプションなし、とにかく動作します。

foo=$(echo -e "\e[32m FOO \e[0m")
echo $foo

echo -eそれでは、ANSIコードが見つかったときに実際に放出される「生のバイト」とは何ですか?私のfoo変数には何が含まれていますか?echo "??? FOO ???"このオプションを必要とせずにシステムに直接統合するにはどうすればよいですか-e

ベストアンサー1

初期の「生出力」には、echo代わりに実際のエスケープ文字(ASCIIコード27、8進数033)が含まれます\e。残りの文字列はそのまま残ります。これは一連の文字をエスケープ文字に置き換えるオプションです-e(タブなどで置き換えるのと同じ)。echobash\e\t

エスケープ文字を$foo介さずに直接統合するには、echo -e文字列に実際のエスケープ文字を入力する必要があります。

では、戻るを押してbashテキストエスケープ文字を入力できます。Ctrl+VEsc

端末では次のようになります。

foo="^[[32mFOO^[[0m"

これらはそれぞれ次のように^[生成されます。Ctrl+VEsc

または$'...'(の「C文字列補間」)を使用して、bash以下を拡張できます\e

foo=$'\e[32mFOO\e[0m'

おすすめ記事