“ls” ou regex não faz distinção entre maiúsculas e minúsculas?

5

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.
    
por zhanwu 01.03.2011 / 14:38

2 respostas

3

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:]]*
    
por 01.03.2011 / 14:54
1

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.

    
por 01.03.2011 / 16:31