readlineのライブラリーは、受け入れ\001
と\002
(ASCII SOHとSTX非印刷可能なテキストの区切り文字として)。これらはreadlineを使用するアプリケーションでも機能します。
からlib/readline/display.c:243
でbashのソースコード:
243 /* Current implementation:
244 \001 (^A) start non-visible characters
245 \002 (^B) end non-visible characters
246 all characters except \001 and \002 (following a \001) are copied to
247 the returned string; all characters except those between \001 and
248 \002 are assumed to be `visible'. */
バッシュ固有\[
と\]
実際にに翻訳されている\001
と\002
でy.tab.c:7640
。
注:あなたが使用している場合はbashをのprintf
かecho -e
、そして、あなたのテキストがある場合\001
や\002
、すぐに番号の前に、あなたがヒットよ、bashの進エスケープを処理するとき、それはあまりにも多くの一桁を食べるようになり、バグを- 、される\00142
進として解釈されます014(ASCII "2"が続く)、正しい8進数01(ASCII "42"が続く)の代わりに。このため、代わりに16進バージョン\x01
を\x02
使用してください。
echo -e "\001\e[31m\002RED"
期待どおりに動作します。ありがとう!