[...] corresponde a um caractere ( elemento de agrupamento em alguns shells) se estiver no conjunto especificado.
[10-12] significa o caractere 1 ou caracteres de 0 a 1 ou caractere 2 , portanto, o mesmo que [102] ou [0-2] .
[10,11,12] significa 1 , 0 , , , 1 ... Então, o mesmo que [,0-2] .
Aqui você quer:
ls -d -- *1[0-2]
Ou seja, nomes de arquivo (não ocultos) que terminam em 1 seguidos por qualquer um dos caracteres 0 , 1 ou 2 .
Agora, tenha em atenção que também corresponde a foo110 ou foo112345612 .
Se você não quiser isso, precisará de algo como:
ls -d -- *[!0-9]1[0-2] 1[0-2]
Isso, no entanto, não corresponderia a foo010
Se estiver fora de foo10 , foo00010 , foo110 você deseja que foo10 e foo00010 correspondam, então com ksh ou bash -O extglob ou zsh -o kshglob :
ls -d -- !(*[0-9])*(0)1[0-2]
Observe que, exceto com zsh , se algum desses padrões não corresponder, os padrões serão passados como estão para ls , portanto, você pode acabar listando arquivos indesejados se houver arquivos com nomes como esse. Com bash , você pode definir a opção failglob para contornar isso.
zsh é o único shell que tem um operador glob para corresponder a intervalos de números.
ls -d -- *<10-12>
corresponderia os arquivos que terminam em um número de 10 a 12. Ele também corresponderia a foo110 , já que é foo1 seguido por 10 . Você poderia fazer (com extendedglob ):
ls -d -- (^*[0-9])<10-12>
embora.
zsh é também o shell que introduziu o tipo {10..12} da expansão da chave (copiada por ksh93 e bash alguns anos depois).
No entanto, como o {10,11,12} equivalente, isso é não globbing. Essa é uma forma de expansão que é feita antes de globbing.
ls -d -- *{10..12}
é expandido primeiro para:
ls -d -- *10 *11 *12
Se algum desses 3 globs falhar, o comando será cancelado em zsh (e bash -O failglob ).