эхо с клавишей Backspace

На самом деле, вы ничего не можете сделать, кроме как использовать [11955]sudo[11956], так что от вас требуется ввести пароль для выполнения команд с повышенными привилегиями, таких как root. [12163] Другой совет, который вы часто будете использовать, это обёртывание деструктивных команд, таких как [11957]rm[11958], так что вам будет предложено "вы уверены? " или с помощью [11959]rm[11960] вы можете использовать переключатель [11961]-i[11962], который приведет к тому, что [11963]rm[11964] будет интерактивным по своей природе, запрашивая подтверждение перед удалением каждого файла.[12164]Предупреждаю, это обычно очень раздражает, и вы, скорее всего, вернетесь к работе с отключенной функцией..

1
25.04.2015, 15:28
2 ответа

Это не имеет ничего общего с командой echo. Вы бы увидели такое же поведение, если бы написали вывод, используя cat, printf, или какую-нибудь другую программу. Это аспект вашего терминала .

И терминалы могут отличаться друг от друга в этом отношении. База данных терминалов будет или не будет иметь для вашего терминала возможность auto_left_margin, известную как bw в termcap. Это говорит программам о том, можно ли использовать обратное пространство для обертывания вокруг левого поля, как это может быть на некоторых терминалах. Если бы вы использовали терминал с автоматическими левыми полями, то c появилась бы в предыдущей строке.

И если бы вы перепрограммировали свои табстопы, вы бы увидели еще большее различие в поведении.

Интересные вещи могут происходить, кстати, при сочетании TAB и BS. Предупреждение 25-летней давности в руководстве по использованию терминологии об обратных интервалах над полями, когда не сообщается о возможности автоматического использования левого поля, или когда курсор находится в первом ряду, перепечатанный везде, начиная с System V Interface Definition и заканчивая руководством FreeBSD, может показаться причудливым и излишне осторожным с первого взгляда; но в мире есть известная обработка кода управления терминалом, которая не совсем корректно его получила.

Дальнейшее чтение

2
27.01.2020, 23:20

В версиях до 2,19, GNU grep -w только рассмотрел бы характер единственного байта alnums и подчеркнул бы (так в местах действия UTF-8, только 26+26+10+1 (письма о ASCII, цифры и подчеркнул бы)) как элементы слова. Так, например, Echo Stéphane | grep -w St будет совпадать. Это было исправлено в 2.19.

Однако вы можете реализовать логику вручную:

 grep -E '([^[:alnum:]_.]|^)test([^[:alnum:]_.]|$)'

Это тест , которому предшествует либо не составляющая слова, либо начало строки, а затем либо не составляющая слова, либо конец строки.

(выше [: alnum:] соответствует цифрам и буквам в вашем языковом стандарте, а не только ASCII, зафиксируйте языковой стандарт на языке C, если требуется только ASCII).

Если вы не хотите, чтобы окружающие ненасловные составляющие были включены в соответствие (например, потому, что вы используете GNU -o ), вы можете на этот раз использовать регекспы PCRE и операторы обзора:

grep -Po '(*UCP)(?<![\w.])test(?![\w.])'

Удалить (* UCP) и добавить LC _ ALL = C

Использование (* UCP) в начале regexp сообщает библиотеке PCRE, что U̲niC̲ode P̲roperties необходимо использовать для \w .

Без него \w будет соответствовать буквенно-цифровым символам языка и подчеркивать, но только для однобайтовых символов. Это не сработает в UTF-8 регионах (норма в настоящее время), где будут сопоставлены только ASCII. (* UCP) также работает для UTF-8. Он будет совпадать на основе собственного представления PCRE о свойствах символов, которые могут отличаться от ваших языковых стандартов, но в системах GNU, это так же, как и UTF-8 определения языковых стандартов, есть неполные и устаревшие (по крайней мере, на 2015-04 гг.).

-121--54405-

эхо не может вернуться за положение, в котором оно было запущено. Независимо от того, сколько задних пространств вы используете, после того, как вы стерли все, что вы вывели, оно остается в начальной позиции. Вот почему вы всегда видите символ 'c', однако много раз вы backspace.

2
27.01.2020, 23:20

Теги

Похожие вопросы