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
(タブなどで置き換えるのと同じ)。echo
bash
\e
\t
エスケープ文字を$foo
介さずに直接統合するには、echo -e
文字列に実際のエスケープ文字を入力する必要があります。
では、戻るを押してbash
テキストエスケープ文字を入力できます。Ctrl+VEsc
端末では次のようになります。
foo="^[[32mFOO^[[0m"
これらはそれぞれ次のように^[
生成されます。Ctrl+VEsc
または$'...'
(の「C文字列補間」)を使用して、bash
以下を拡張できます\e
。
foo=$'\e[32mFOO\e[0m'