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 '
これは特別なものを使用します$'...'
引用するbash
ANSI Cエスケープをサポートしています。これは0a
単に改行(改行)文字に過ぎず、あなたが望むと思われるので、上記の空白に自由に置き換えました。
もちろん、PS1='☢ '
UTF-8エンコーディングを見つけてエスケープ文字を入力するのは面倒な全体的なプロセスではなく、生の文字自体()を使用することもできます。
答え2
最新バージョンのbashでは、Unicode値を使用することもできます。
PS1=$'\u2622 '
これにより、ローカル文字セット/エンコーディングがutf-8でなくても正しく(または少なくとも悪くないように)拡張/表示されます(そうでなければ、そこでバグが見つかったかのようにbashがクラッシュまたはゴミを出力します)。