Брекеты не являются шаблонами подстановочных знаков. Проверьте документацию расширений bash : фигурные скобки раскрываются очень рано, а шаблоны подстановочных знаков раскрываются на последнем шаге¹.
Первоначально команда состоит из двух слов echo
, *{1..12}
. После расширения распорки, команда состоит из 13 слов: echo
, *1
, *2
, ..., *12
. Затем шаблоны подстановочных знаков расширяются. *1
расширяется до списка имен файлов, оканчивающихся на 1
, который включает в себя не только, file1
но и file11
(который затем сортируется в лексикографическом порядке). Аналогично *2
расширяется до file12
и file2
(в этом порядке). Таким образом , вы получите echo
, file1
, file11
, file12
, file2
, а затем другие специальные символы , которые соответствуют один файл: file3
, file4
, ..., file12
.
¹ Рядом с последним, если вы следуете описанию руководства, но «удаление кавычек» на самом деле не вещь - кавычки анализируются раньше, чем процесс расширения.
Жиль "ТАК - перестань быть злым"
источник