"Ls" або regex нечутливі до регістру?


5

У баш я намагався

ls [a-z]*

і очікується, що список всіх файлів з ім'ям файла починається з малого алфавіту. Але чому ж файли з іменем починаються з великого алфавіту випадку?

>ls [a-z]*
D  e
>

У разі необхідності, версія bash:

bash --version       GNU bash, версія 4.1.5 (1) -реліз (i486-pc-linux-gnu)       Copyright (C) 2009 Free Software Foundation, Inc.       Ліцензія GPLv3 +: GNU GPL версії 3 або пізнішої http://gnu.org/licenses/gpl.html

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

* у bash не є регулярним виразом *. [a-z] виглядає трохи регулярно, як і bash. Наприклад, ls a + не відповідає aaa, так що якщо він підтримує регулярні вирази, то це не так. Я не впевнений, в якій мірі, якщо взагалі. echo a {3}, echo a {3} просто віддзеркалює {3} і не інтерпретує його як регулярний вираз.
barlop

ось стаття про відповідність шаблону bash faqs.org/docs/bashman/bashref_35.html це згадує "Якщо опція оболонки extglob увімкнена за допомогою вбудованого shopt, розпізнаються декілька розширених операторів зіставлення шаблонів. може бути сформовано з використанням одного або декількох з наступних під-шаблонів: "Але я не впевнений, як ви включили б цей варіант
barlop

На cygwin, [a-z] * виглядає так само, як [[: lower:]] *, вони не відображаються великими літерами. GNU bash, версія 3.2.51 (24) -реліз (i686-pc-cygwin)
barlop

1
@barlop: Поведінка діапазонів символів залежить від локалі, зокрема від LC_COLLATE Встановлення в деяких (багатьох?) місцевостях, [a-z] включає "aAbB ... yYz", але не "Z". Можна ввімкнути розширене використання глобусів shopt -s extglob. Я отримую різні результати для [a-z] і [[:lower:]] на Cygwin.
Dennis Williamson

Відповіді:


3

Це не регулярні вирази, в яких відбувається плутанина.

$ man 7 glob

Замість [a-z] потрібно використовувати [[: lower:]] як таке:

$ ls -d [[:lower:]]*

чи є "глобування" так званого "розширення шляху"?
zhanwu

Ні - розширення шляху є такими речами, як ~ fred / foo.bar, перекладається в /home/fred/foo.bar
Majenko

1

1) Це може залежати від вашої операційної системи, більш конкретно від вашої файлової системи. Чи чутливі до регістру файлові системи? Ви не згадуєте тип ОС або файлової системи.

2) bash також може робити нечутливі глобуси. Ви можете перевірити, чи це ваш поточний випадок shopt | grep nocaseglob

Крім того, пам'ятайте про це ls не робить нічого з файлами. Ваша оболонка, а потім передає імена файлів ls.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.