Это связано с тем, как терминал интерпретирует escape-символы. О сообщалось за Python 2 несколько лет назад. Цитата:
Python сама по себе не обрабатывает backspace специально. То, что вы, вероятно, видите, это терминал, интерпретирующий клавишу возврата, особенно путем перемещения курсора влево (без стирания чего-либо).
Это означает, что если у вас есть символ после \b
, терминал переместит курсор влево и «заменит» оригинальный символ новым. Если других символов нет, ничто не заменит старого символа.
Попытка передать вывод в hexdump
, как показано в вашем примере:
$ python3.8 -c
'print("abc#\bde#\bf#\bghi#\bjklmn#\bop\b")' | hexdump -C
00000000 61 62 63 23 08 64 65 23 08 66 23 08 67 68 69 23 |abc#.de#.f#.ghi#|
00000010 08 6a 6b 6c 6d 6e 23 08 6f 70 08 0a |.jklmn#.op..|
0000001c
Вы можете заметить символ 08
там (\b
).