UTF-8シンボルを印刷する方法

UTF-8シンボルを印刷する方法

bashコマンドを使用して端末にUTF-8シンボルを印刷する方法。

これは効果があります

echo -e '\U2586'

しかし、以下は失敗します

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

ベストアンサー1

printfBashの型文字列の後にあるパラメータでバックスラッシュエスケープシーケンスを拡張するには、次の手順を実行する必要があります。使用%b%sフォーマット文字列の代わりに:

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

3つの引数があるので、おそらくこれがより適切かもしれません。

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

〜のようにスティーブン・チャジェラスこれは、現在のロケールの文字セットから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の違いは何ですか?上記で使用した変数の設定に関する注意事項です。 )

おすすめ記事