理想情況下,這行 PolyML 代碼應該給出所需的結果:
print "\033[31m RED \033[0m NORMAL \n";
但結果 \033 只是一個感嘆號,而不是顏色編碼的特殊符號。我使用以下“繞過”方法,但它不允許以互動方式執行任何操作:我只是獲取程式的輸出并為其著色。
echo "\\\\033[31m RED \\\\033[0m NORMAL \\\\n" | xargs echo -e
這個問題有哪些可能的解決方案?是否可以在標準 PolyML 工具中解決它?
補充:我檢查了 Ocaml 如何做同樣的事情
Printf.printf "\033[31m RED \033[0m NORMAL \n";;
-- 情況相同:未獲得顏色。
uj5u.com熱心網友回復:
感謝這個問題: OCaml color console output
正確答案是在 Ocaml 和 PolyML 中使用代碼 \027 而不是 \033:
print "\027[31m RED \027[0m NORMAL \n";
uj5u.com熱心網友回復:
\033 是一個字符轉義序列,在 bash 和許多其他語言中被解釋為八進制數 33 對應的 ASCII 碼字符。
然而,在 OCaml 中,這個轉義序列被解釋為十進制。我們可以將數字從八進制 (33) 轉換為十進制 (27) 并繼續使用此語法,或者對八進制轉義序列 ( \o027)使用正確的語法。或者,\x1b如果我們想要更冒險一些,我們甚至可以使用十六進制 ( )。
所有這些都將在OCaml的作業,也可能PolyML(如果更換Printf.printf用print的課程):
Printf.printf "\027[31m RED \027[0m NORMAL \n";;
Printf.printf "\o033[31m RED \o033[0m NORMAL \n";;
Printf.printf "\x1b[31m RED \x1b[0m NORMAL \n";;
來源:OCaml 手冊第 9.1 章:詞法約定
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/401059.html
上一篇:處理bash腳本中的特殊字符
