но zsh, по-видимому, думает, что я прошу файлы 2 - 5 (или что-то как этот) вместо файлов 2 - 57. Какие-либо мысли, почему?
Поскольку []
скобки указывают на список подобранных символов (который может быть цифрами), не числа, интерпретируемые математически. Такой шаблон подобран против отдельного символа. Список может содержать диапазоны, но цифр или букв. [2-57]
соответствие расширяется до "Всех цифр в диапазоне от 2 до 5 и 7".
Для соответствия числам от 2 до 57 было бы легче использовать выражение последовательности вместо globbing шаблона (или вместе с таким):
for x in /foo/bar/*{2..57}; do print $x; done
Править: Но это, к сожалению, не даст Вам лексикографическое распоряжение всех перечисленных файлов - они были бы сгруппированы общими окончаниями числа, должными окружать расширение.
infocmp
может помочь. Это пишет Escape как \E
вместо \e
или ^[
.
Например, для нахождения \e[A
, который является Вашим history-search-backward:
$ infocmp -1x | grep -F '=\E[A,'
cuu1=\E[A,
$ man 5 terminfo | grep ' cuu1 '
cursor_up cuu1 up up one line
Который говорит Вам нажимать курсор, иначе стрелка вверх.
Обратите внимание, что Вам будет нужно -x
флаг (показанный выше) для отображения некоторых комбинаций, например, Ctrl + <-.
Эти расширенные ключи не являются частью стандарта, таким образом, они не перечислены в terminfo странице справочника, но они документируются в terminfo файл.
Также обратите внимание, что управляющие последовательности варьируются, в зависимости от которого терминала Вы используете.
Можно получить информацию о другом терминале при помощи infocmp -1x <terminal>
, например. infocmp -1x rxvt
, infocmp -1x putty
, и т.д.
После того как Вы выясняете, какой terminfo думает, что Вы имеете, вещи будут легче при установке Вашего TERM
переменная для соответствия.
Функция cat
- обычный способ сделать это, поскольку вы можете использовать ее, чтобы показать, что на самом деле отправляет ваша клавиатура. bash не использует какую-либо расширенную информацию в базе данных терминала (он использует подмножество обычных возможностей termcap).
Недостатком использования cat
, конечно же, является определение того, является ли
^[[A
^
[
A
или escape A
(с учетом того, что bash предоставляет печатный \ e
, представляющий escape-символ ).
На практике вы можете игнорировать первое: по сути, никто не отправляет три буквальных символа, «все» отправляют этот ^ [
как escape-символ ).
Дополнительная литература:
\ E
).
infocmp
не поможет, если Вы будете использовать комбинацию не в терминальном описании. – Thomas Dickey 03.11.2016, 02:37