Readline бібліотека приймає \001
і \002
(ASCII SOH і STX ) в недрукованих текстових роздільників. Вони також працюють у будь-якій програмі, що використовує лінію читання .
З lib/readline/display.c:243
в Баш вихідного коду:
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
безпосередньо перед числом, ви потрапите на баш- помилку, яка змушує його з'їсти одну цифру занадто багато при обробці восьмеричних втеч - тобто \00142
буде інтерпретуватися як восьмерична 014 (далі - ASCII "2"), а не правильний восьмеричний 01 (далі - ASCII "42"). З цієї причини використовуйте шістнадцяткову версію \x01
і \x02
замість цього.
echo -e "\001\e[31m\002RED"
працює як очікувалося. Спасибі!