5

В bash я пробовал

ls [a-z]*

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

>ls [a-z]*
D  e
>

В случае необходимости, версия bash:

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

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

2 ответа2

3

Это не регулярное выражение, где и возникает путаница. Вместо этого он использует систему под названием "globbing" - см .:

$ man 7 glob

Вместо [az] вам нужно использовать [[:lower:]] как таковой:

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

1) Это может зависеть от вашей операционной системы, а точнее от вашей файловой системы. Ваша файловая система чувствительна к регистру? Вы не упоминаете ОС или тип файловой системы.

2) bash также может выполнять нечувствительную к регистру глобализацию. Вы можете проверить, является ли это вашим текущим случаем с shopt | grep nocaseglob

Кроме того, помните, что ls ничего не делает с файлами. Ваша оболочка передает имена файлов в ls.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .