Os shells tratam números com zeros à esquerda como octal. Um truque para contornar isso é manipular apenas números com um dígito à esquerda extra diferente de zero, por exemplo conte de 1000001 a 1999999. Para obter o número desejado com zeros à esquerda, retire o primeiro 1 com uma operação de string.
n=1000001
while [ $n -le 1999999 ]; do
digits=${n#1}
set "A-B-$digits-."*
if [ -e "$1" ]; then echo "${digits}: $#"; fi
n=$((n+1))
done
Este método é portátil para todos os shells do POSIX e evita a criação de um subprocesso para os cálculos, o que pode torná-lo mais rápido (mas um milhão de iterações provavelmente serão lentas de qualquer maneira, shells não são as melhores no desempenho).
No script acima, em vez do comando complexo e lento envolvendo ls
e wc
para contar arquivos correspondentes, eu uso construções internas do shell: set A-B-$digits-.*
define os parâmetros posicionais para a lista de arquivos correspondentes, e a linha a seguir imprime o número de correspondências ( $#
) se houver pelo menos uma correspondência (se não houver correspondência, o padrão permanecerá inalterado e, portanto, [ -e "$1" ]
será [ -e "A-B-$digits-.*" ]
, que é falso).