'echo [A-Z] *' также соответствует именам нижних регистров?

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

$ 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 будет соответствовать моему pattern.

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

6
задан 25 March 2018 в 14:25

3 ответа

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

совпадающей последовательностью текущего языка и набором символов

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

echo [[:upper:]]*
[d4 ] или установить локаль явно

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

или использовать опцию оболочки bash globasciiranges

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

См. раздел Pattern matching в man bash

14
ответ дан 8 June 2018 в 15:18
  • 1
    (но разные): если вы используете shopt -s nocaseglob, расширение glob не зависит от регистра даже для недиапазонных частей шаблона. например echo DeV* будет соответствовать dev. Это удобная настройка, если вы часто работаете с файлами с непоследовательным случаем. – Peter Cordes 25 March 2018 в 09:14

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

совпадающей последовательностью текущего языка и набором символов

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

echo [[:upper:]]*

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

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

или использовать опцию оболочки bash globasciiranges

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

См. раздел Pattern matching в man bash

14
ответ дан 17 July 2018 в 18:09

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

совпадающей последовательностью текущего языка и набором символов

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

echo [[:upper:]]*

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

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

или использовать опцию оболочки bash globasciiranges

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

См. раздел Pattern matching в man bash

14
ответ дан 23 July 2018 в 18:58

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

Похожие вопросы: