bashコマンドを使用して端末にUTF-8シンボルを印刷する方法。
これは効果があります
echo -e '\U2586'
しかし、以下は失敗します
printf '%s\n' $(tput setaf 118) "\\u2586" $(tput sgr0)
ベストアンサー1
printf
Bashの型文字列の後にあるパラメータでバックスラッシュエスケープシーケンスを拡張するには、次の手順を実行する必要があります。使用%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の違いは何ですか?上記で使用した変数の設定に関する注意事項です。 )