Na versão bash 4.3 e posterior, existe uma opção shopt chamada globasciiranges
:
De acordo com as páginas de manuais internos do gnu na loja :
globasciiranges
If set, range expressions used in pattern matching bracket expressions (see Pattern Matching) behave as if in the traditional C locale when performing comparisons. That is, the current locale’s collating sequence is not taken into account, so ‘b’ will not collate between ‘A’ and ‘B’, and upper-case and lower-case ASCII characters will collate together.
Como resultado, você pode
$ shopt -s globasciiranges
$ echo [A-Z]*
Use shopt -u
para desativar.
Outra maneira é alterar o código de idioma para C. Você pode fazer isso temporariamente usando um subshell:
$ ( LC_ALL=C ; printf '%s\n' [A-Z]*; )
Você obterá os resultados necessários e, quando o sub shell terminar, o local do seu shell principal permanecerá inalterado para o que foi antes.
Outra alternativa é, em vez de [A-Z]
, usar a expansão de concha {A..Z}
junto com a opção nullglob
bash shopt.
Ao ativar a opção nullglob
, se um padrão não for correspondido durante a expansão do nome do caminho, uma cadeia nula será retornada em vez do próprio padrão.
Como resultado, este funcionará como esperado:
$ shopt -s nullglob;printf '%s\n' {A..Z}*