BashプロンプトはUnicodeエスケープ文字を認識できません。

BashプロンプトはUnicodeエスケープ文字を認識できません。

Unicode文字を使用してBashプロンプトをカスタマイズしようとすると問題があります。次のようなUnicode文字を含めようとすると:

$ echo ☢ | hexdump -C
00000000  e2 98 a2 0a                                       |....|
00000004

$ PS1="\xe2\x98\xa2\x0a"

私のプロンプトは次のとおりです。

\xe2\x98\xa2\x0a

...☢文字を表示する代わりに。私は何が間違っていましたか?

答え1

bashこれは単純な二重引用符の有効なエスケープ構文ではありません。試してみてください

PS1=$'\xe2\x98\xa2 '

これは特別なものを使用します$'...'引用するbashANSI Cエスケープをサポートしています。これは0a単に改行(改行)文字に過ぎず、あなたが望むと思われるので、上記の空白に自由に置き換えました。

もちろん、PS1='☢ 'UTF-8エンコーディングを見つけてエスケープ文字を入力するのは面倒な全体的なプロセスではなく、生の文字自体()を使用することもできます。

答え2

最新バージョンのbashでは、Unicode値を使用することもできます。

PS1=$'\u2622 '

これにより、ローカル文字セット/エンコーディングがutf-8でなくても正しく(または少なくとも悪くないように)拡張/表示されます(そうでなければ、そこでバグが見つかったかのようにbashがクラッシュまたはゴミを出力します)。

関連情報