Соответствует ли bash * файлы в алфавитно-цифровом порядке?

4853
therefromhere

Я хочу объединить кучу файлов в порядке имен файлов.

Можно ли предположить, что это даст мне их в алфавитно-цифровом порядке?

cat * 

т.е. тот же порядок, который lsдает.

22

2 ответа на вопрос

22
BloodPhilia

Краткий ответ: да, будет.

Со страницы руководства bash :

После разделения слов, если не установлена ​​опция -f (см. Построение набора), Bash сканирует каждое слово на наличие символов «*», «?» И «[». Если появляется один из этих символов, слово считается шаблоном и заменяется отсортированным по алфавиту списком имен файлов, соответствующих шаблону.

Обратите внимание, что «алфавитный» варьируется в зависимости от настроек локали (в частности, `$ LC_COLLATE`). grawity 13 лет назад 6
@grawity true, но это приведет к тому же результату, что и `ls` в той же системе. BloodPhilia 13 лет назад 4
7
dtlussier

Краткий ответ - да, но вы должны знать, что, по его мнению, должен быть буквенно-цифровой порядок, поскольку он может не соответствовать естественному порядку, который вы имеете в виду.

Например, запустите некоторый тест на то, как обрабатываются верхний и нижний регистр, чтобы узнать в вашей системе, а также последовательности чисел.

Распространенная проблема, с которой я столкнулся при упорядочении списков файлов, возвращаемых глобусом, - нумерованные файлы. Мне часто дают файлы, пронумерованные как:

blah_1.txt blah_2.txt ... blah_10.txt blah_11.txt 

Тем не менее, глобус с использованием *не будет возвращать их в этом порядке, вместо этого вы получите что-то вроде:

blah_1.txt blah_10.txt blah_11.txt ... blah_2.txt blah_20.txt ... 

Так что - чтобы избежать этой проблемы, вы будете должны сделать некоторые манипуляции на возвращаемом список файлов или переименовывать файлы, так что отдельные цифры имеют лидирующие нуль (то есть blah_01.txt, blah_02.txtи т.д.).