'echo [A-Z] *' também corresponde a nomes de arquivos em minúsculas?

6

Estou trabalhando no diretório raiz e quero imprimir entradas de diretório que começam com uma letra maiúscula.

$ echo [A-Z]*
Applications Library Network System Users Volumes bin cores dev etc home installer.failurerequests net private sbin tmp usr var vm

O resultado me confunde porque eu não estava esperando cores dev etc home installer.failurerequests net private sbin tmp usr var vm para corresponder ao meu padrão.

Como posso escrever um padrão glob que corresponda apenas a letras maiúsculas?

    
por JawSaw 25.03.2018 / 03:53

1 resposta

14

Isso porque o padrão glob [A-Z] geralmente não corresponde a letras maiúsculas. Especificamente, expande de acordo com

the current locale's collating sequence and character set

Se você deseja arquivos que começam com uma letra maiúscula, você pode usar

echo [[:upper:]]*

ou defina a localidade explicitamente

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

ou use a opção bash globasciiranges shell

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

Veja a seção Pattern matching de man bash

    
por steeldriver 25.03.2018 / 04:10