Não há absolutamente nenhum motivo para analisar ls
output quando a expansão é realmente feita pelo shell. Em vez deste código:
for data in 'ls a*| sort -n'
Você pode usar isto:
for data in a*
Mesmo que você precise classificá-lo, use isso (que falhará para nomes de arquivos com novas linhas):
for data in $( echo a* | sort -n )
E a melhor maneira de trabalhar com vários valores é transformá-los em uma matriz.
Em específico, a matriz de parâmetros:
set -- a*
printf '<%s>' "$@"; echo
E o seu código para fazer algum trabalho, um por um, se torna tão simples assim:
#!/bin/bash
set -- a*
numb=$#
printf '%s ' "$@"
Para processar com base no número do arquivo, você pode fazer:
#!/bin/bash
# using bash as the [[ is more robust.
set -- a* # set an array of all files that start by a
for file # walk the array one by one
do
[[ ${file#a\.} -le 20 ]] && continue # is the file number < 20
printf '%s\n' "$file" # do additional processing here
done