Библиотека 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'. */
Специфичные для bash \[
и \]
фактически транслируются в \001
и \002
при y.tab.c:7640
.
Примечание. Если вы используете команду printf
или echo -e
bash , и если ваш текст имеет \001
или \002
непосредственно перед числом, вы обнаружите ошибку bash , из-за которой при обработке восьмеричных кодировок она съедает одну цифру слишком много - то есть \00142
будет интерпретироваться как восьмеричный 014 (за которым следует ASCII "2") вместо правильного восьмеричного 01 (за которым следует ASCII "42"). По этой причине используйте шестнадцатеричные версии \x01
и \x02
.