[2-57]являє собою набір символів , що складається з 2, 3, 4, 5і 7, в Zsh і будь-який інший шаблону і синтаксисі регулярних виразів там. Ваш шаблон шаблону *[2-57]відповідає кожному імені файлу, останній символ якого - одна з цих п'яти цифр.
Я думаю, ви неправильно запам'ятовуєте синтаксис глобального [m,n] класифікатора . Кваліфікатори глобусу завжди містяться в дужках в кінці шаблону, а роздільник діапазону є комою. Шаблон *([2,57])розширюється до 2-го, 3-го,…, 57-го збігів. Порядок розширення за замовчуванням є лексикографічним (з якоюсь особливою магією сортувати числа за порядковим числом, якщо numeric_glob_sortпараметр встановлений); ви можете керувати ним за допомогою oабо Oглобального класифікатора (наприклад, *(om[2,57])щоб відповідати 57 найновішим файлам, крім одного самого останнього файлу).
for x in /foo/bar/*([2,57]); do print $x; done
Не те, про що ви просили, але пов’язане і, можливо, корисне майбутнім читачам: якщо ви хочете перерахувати файли від 2 до 57, існують вони чи ні, ви можете використовувати вираз діапазону дужок . Ця функція існує також у bash та ksh.
echo hello{2..57}
І якщо ви хочете відповідати файлам, ім'я яких містить число від 2 до 57, ви можете використовувати шаблон <2-57>. Це специфічно для zsh.
$ ls
file1 file2 file3 file57 file58
$ echo file<2-57>
file2 file3 file57
Зауважте, що такий зразок *<2-57>, ймовірно, не буде робити те, що ви очікуєте, тому що *може відповідати цифрам. Наприклад, file58сірники *<2-57>, з file5узгодженням *частини та 8узгодженням <2-57>частини. Ця модель *[^0-9]<2-57>уникає цього питання.