«echo [AZ]*» также соответствует именам файлов в нижнем регистре?

«echo [AZ]*» также соответствует именам файлов в нижнем регистре?

Я работаю с корневым каталогом и хочу вывести записи каталога, начинающиеся с заглавной буквы.

$ echo [A-Z]*
Applications Library Network System Users Volumes bin cores dev etc home installer.failurerequests net private sbin tmp usr var vm

Результат меня сбил с толку, так как я не ожидал, cores dev etc home installer.failurerequests net private sbin tmp usr var vmчто он будет соответствовать моему образцу.

Как написать шаблон, который соответствует только заглавным буквам?

решение1

Это потому, что шаблон glob [A-Z]в целом не соответствует заглавным буквам. В частности, он расширяется в соответствии с

последовательность сортировки и набор символов текущей локали

Если вам нужны файлы, начинающиеся с заглавной буквы, вы можете использовать

echo [[:upper:]]*

или явно указать локаль

(LC_COLLATE=C; echo [A-Z]*)

globasciirangesили используйте опцию оболочки bash

(shopt -s globasciiranges; echo [A-Z]*)

Смотрите Pattern matchingразделman bash

Связанный контент