Acho que você esperava que, na primeira linha, por exemplo, o comando date=${f#*}
removeria DBSOURCE
da variável f
porque você fez referência a *[0-9]...[0-9].gz
. Não é possível usar *
in date=${f#*}
para que a primeira parte seja removida da variável, pois *
não é passado separadamente no loop for
como DBSOURCE
neste exemplo.
Se a estrutura do nome do arquivo é sempre a mesma, você pode simplesmente usar
date=${f//[^0-9]/}
para remover todos os caracteres não dígitos (na verdade, substitua todos os caracteres não dígitos por "nada")
Outra maneira é usar tr
para extrair a data:
date='echo $f|tr -d '[:alpha:] [:punct:]''