Bash
如何在沒有“-e”選項或中間變數的情況下“回顯”彩色消息?
在處理ANSI 轉義碼以列印彩色消息時,我真的很難理解
echo
(以及其他此類命令)的行為。我知道我可以使用這樣的
-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
選項?
您初始的“原始輸出”
echo
將包含實際的轉義字元(ASCII 程式碼 27,八進制 033)而不是\e
. 字元串的其餘部分保持原樣。它是用轉義字元替換字元序列的選項(-e
就像它會用製表符等替換一樣)echo``bash``\e``\t
要將轉義字元直接合併到
$foo
不通過echo -e
,您必須在字元串中鍵入實際的文字轉義字元。在
bash
中,您可以通過按Ctrl+V
後跟來鍵入文字轉義字元Esc
。在終端中,這看起來像
foo="^[[32mFOO^[[0m"
其中每個
^[
生成Ctrl+V
後跟Esc
.或者,您可以使用
$'...'
(“C string interpolation” inbash
) 來展開\e
:foo=$'\e[32mFOO\e[0m'