プロンプトが右から左に書くテキストの周りで歪むのを防ぐために、ゼロ幅の LRM を bash プロンプト (U200e) に挿入したいと思います。これはゼロ幅の文字なので、直感的に で囲むことにしました\[<200e>\]
。しかし、実際には、これによって bash が間違った場所で行を折り返すことになります。何も囲まないと、それから問題なく動作するようです。
理解できません。bash がこの文字がゼロ幅であることを自動検出したとしても、\[...\]
その周りに a をラップしても何も問題はありません。
編集済み: 質問は、\[...\]
エスケープが実際に必要なのはいつなのか、エスケープする文字が実際にゼロ幅である場合、それがどのように有害になる可能性があるのかということです。
答え1
投稿を見る bash で長さゼロの文字をエスケープする.そして具体的には マイケル・アレンの回答 以下に転載します。
これらの
\[
シーケンスは、PS1 を含むいくつかのユーティリティによって、\001
および\002
制御コードを表すために使用されます。
\[
=>\x01
または\001
\]
=>\x02
または\002
\[
printf と echo は からへのこの変換を行いません\001
。したがって、解決策は自分で変換を行うことでした。長さが 0 の文字を次のようにラップする代わりに
\[
、echo "\[\033[1;30m\]foo\[\033[0m\]"
出力は
\[foo\]
代わりに実際の制御コードを出力します。
echo "\x01\033[1;30m\x02foo\x01\033[0m\x02"
foo
PS1 printf と echo の両方に出力します。具体的な例についてはgit-radar のこのコミット。