Bash

如何列印 UTF-8 符號

  • August 10, 2021

如何使用 bash 命令在終端上列印 UTF-8 符號。

這有效

echo -e '\U2586'

但以下失敗

printf '%s\n' $(tput setaf 118) "\\u2586" $(tput sgr0)

在 bash 中,如果要printf在格式字元串之後的參數中擴展反斜杠轉義序列,則應在格式字元串中使用%b而不是%s

printf '%b\n' "$(tput setaf 118)" "\u2586" "$(tput sgr0)"

既然你有三個論點,也許這可能更合適:

printf '%s%b%s\n' "$(tput setaf 118)" "\u2586" "$(tput sgr0)"

正如Stéphane Chazelas 所指出的,這將在目前語言環境的字元集中輸出 U+2586 字元的編碼。如果是 UTF-8,則結果將是 UTF-8;其他字元集會有所不同。如果字元集不能表示 U+2586,則結果將是字元串“\u2586”(zsh 將失敗並出現“字元不在範圍內”錯誤)。

這會在大多數情況下產生您想要的行為:如果可能,它會顯示“▆”。如果你真的想輸出字元的 UTF-8 表示,在所有情況下,你都可以通過覆蓋語言環境來強制它,例如

LC_ALL= LC_CTYPE=en_US.UTF-8 printf '%s%b%s\n' "$(tput setaf 118)" "\u2586" "$(tput sgr0)"

(有關上面使用的變數設置的說明,請參閱LANG=C 和 LC_ALL=C 之間有什麼區別。)

引用自:https://unix.stackexchange.com/questions/664055