Перед входом в систему нажмите Ctrl-Alt-F1
. Это откроет окно терминала.
Подробнее о различных комбинациях клавиш терминала
Backspace сам по себе не является деструктивным, хотя большинство редакторов (и даже командная строка) делают это именно так. Что на самом деле происходит, так это то, что эти программы, хотя и интерактивные, делают резервную копию курсора, затем они пишут пробел и снова делают резервную копию, чтобы правильно расположить курсор.
Таким образом, ваша строка может быть echo -e "abc\b \b"
, и тогда она будет работать.
Вы можете проверить это, выполнив echo -n -e "abc\b"
(-n удаляет автоматический переход на следующую строку). Ваша подсказка теперь перезапишет «c».
Это чем-то похоже на \n
, что означает переход на следующую строку (но не на край), и \r
, что означает переход на край (но не на край). следующую строку). Операционные системы интерпретируют эти символы по-разному (Unix добавляет следующую строку к \n, DOS имеет оба символа и т. д.).
Да, это работает как положено (символ x удаляется):
$ echo -e 'ax\bc'
ac
И да, это "похоже", что при этом теряется символ возврата на одну позицию:
$ echo -e 'abx\b'
abx
Обратите внимание, что символ возврата(\b
)не совпадает с клавишей клавиатуры Backspace .
Клавиатура Backspace печатает ^?
с Ctrl -VBackspace .
Многие редакторы интерпретируют это как возвращение и удаление персонажа. Это намного сложнее, чем просто напечатать пробел, вся строка вправо должна быть перемещена на один пробел (или два для широких символов, или ноль для управляющих символов )влево для каждого стираемого символа, или, если стертый символ представляет собой новую строку, переместите всю строку на одну строку вверх. Нет, это не простой символ, это целая процедура, связанная с клавишей Backspace .
Однако нет, на самом деле в консоль записывается символ возврата.
Посмотреть, что передается на консоль, можно с помощьюod
:
$ echo -e 'abx\b' | od -vAn -tx1c
61 62 63 08 0a
a b x \b \n
Итак, что происходит?
abx
записывается в консоль. abx
в линейный буфер. \b
записывается в консоль. \b
заставляет буфер строки консоли перемещаться на один символ назад. \n
выводится на консоль. Это стандартный способ работы консолей.
Взгляните на это:
$ printf 'abcdef\b\b\b \n'
abc ef
Символ d
заменяется пробелом.
Почему 'ax\bc'
удаляет x?
Поскольку символ c
перезаписывает символ x
.