Não é regexp, que é onde entra a confusão. Em vez disso, ele usa um sistema chamado "globbing" - veja:
$ man 7 glob
Em vez de [a-z], você precisa usar [[: lower:]] como tal:
$ ls -d [[:lower:]]*
No bash, eu tentei
ls [a-z]*
e esperado para listar todos os arquivos com nome de arquivo começa com o alfabeto de letras minúsculas. Mas por que os arquivos com nome começa com o alfabeto grande também são mostrados?
>ls [a-z]*
D e
>
Caso necessário, a versão bash:
bash --version GNU bash, version 4.1.5(1)-release (i486-pc-linux-gnu) Copyright (C) 2009 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later 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.
1) Pode depender do seu sistema operacional, mais especificamente do seu sistema de arquivos. Seu sistema de arquivos é sensível a maiúsculas e minúsculas? Você não menciona o SO ou o tipo de sistema de arquivos.
2) bash também pode fazer globbing insensível caso. Você pode verificar se este é o seu caso atual com shopt | grep nocaseglob
Além disso, como um aparte, lembre-se de que ls
não está fazendo nada com os arquivos. Seu shell está, então, passando os nomes de arquivos para ls.