В Bash гарантированы ли расширения подстановочного знака в порядке?

Гарантируется ли расширение подстановочного знака в Bash в алфавитном порядке? Я вынужден разбить большой файл на 10 Мбайт, чтобы они могли быть приняты моим репозиторием Mercurial.

Поэтому я подумал, что мог бы использовать:

split -b 10485760 Big.file BigFilePiece.

а затем вместо:

cat BigFile | bigFileProcessor

Я мог бы сделать:

cat BigFilePiece.* | bigFileProcessor

на своем месте.

Тем не менее, я не мог найти нигде, что гарантировано, что расширение звездочки (ака подстановочный знак, ака *) всегда будет в алфавитном порядке, чтобы .aa пришел раньше .ab (в отличие от порядка временных меток или чего-то в этом роде).

Кроме того, есть ли недостатки в моем плане? Насколько велика стоимость исполнения catвместе файл?

3 ответа

Решение

Да, расширение globbing является алфавитным.

Из Баш man страница:

Расширение пути

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

Это документированное поведение для bash так что вы можете зависеть от этого в своих сценариях. Это также верно в отношении других совместимых с Bourne оболочек в течение очень долгого времени... хотя могут быть угловые случаи, касающиеся свертывания регистра или не алфавитно-цифровых символов.

(Полученный список, в bash будет в почти "ASCII-бетическом" порядке - за исключением того, что буквы в нижнем и верхнем регистре будут сопоставляться вместе, как если бы не было различий в регистре, но с разбором в нижнем регистре до их эквивалентов в верхнем регистре. Все неалфавитные выражения должны сопоставляться в том же порядке, в котором они указаны в ASCII).

Как уже отмечали другие, это может быть нарушено настройками вашей языковой среды: LANG в целом и LC_COLLATE более конкретно. Может быть безопаснее всего запускать команды, которые зависят от порядка расширения глобуса под env Команда очистить окружающую среду (используя -i или же -u при необходимости) или передать результаты через sort обеспечить надежную последовательность.

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

Убедитесь, что в вашем скрипте установлено значение "C", если вы хотите, чтобы это было переносимо.

Другие вопросы по тегам