grep -E '^${g_filPfix}-([0-9]{3})-([0-9]{8})-([0-9]{9})${g_fileExt}$'
O problema imediato aqui é que o padrão para grep
é agrupado em aspas simples, portanto, o shell não expandirá as variáveis g_filPfix
e g_fileExt
. Substituir as aspas por aspas duplas resolveria isso. (e você não precisa dos parênteses no padrão).
A análise da saída de ls
pode ser problemática com nomes de arquivos com espaços em branco ou alguns caracteres ímpares. Em particular, um nome de arquivo com um espaço no meio seria tomado como dois nomes de arquivo.
Se você não precisa realmente de um padrão tão rígido, você pode simplesmente processar todos os arquivos com o prefixo e o sufixo fornecidos:
for f in "$dir/$prefix"*"$suffix" ; do
somecmd "$f"
done
Se você precisar do padrão estrito, alguns shells (como o Bash, que você provavelmente tem no Linux) podem fazer a correspondência de regex sem ferramentas externas. Então, fazer um loop em todos os arquivos no diretório e ignorar os arquivos que não correspondem ao padrão:
for f in "$dir"/* ; do
[[ "$f" =~ "/$prefix"-[0-9]{3}-[0-9]{8}-[0-9]{9}"$suffix"$ ]] || continue
somecmd "$f"
done