Parece que você está tentando analisar um número de seis dígitos em nomes de arquivos que começam com $INPUT_FILE_PREFIX
e terminam com $INPUT_FILE_SUFFIX
.
Isso fará isso:
for name in "$INPUT_DIR/$INPUT_FILE_PREFIX"??????"$INPUT_FILE_SUFFIX"; do
test -f "$name" || continue
number=${name#$INPUT_DIR/$INPUT_FILE_PREFIX}
number=${number%$INPUT_FILE_SUFFIX}
printf "Number = %s\n" "$number"
done
Altere todos os ?
para [0-9]
se você quiser apenas coincidir os dígitos ( ?
corresponde a um único caractere, independentemente do que esse caractere é).
As substituições de parâmetro no loop remove a primeira parte do valor de $name
e, em seguida, a última parte da sequência restante, deixando o número (seis caracteres entre prefixo e sufixo) no meio como a única coisa restante a variável $number
.
O comando
MYDATE=$("$i" | grep -oP '\d{6,6}')
, como você descobriu, será interpretado como invocando o que está em $i
como um comando. Ao mesmo tempo, você disse que colocar echo
na frente de "$i"
faria com que funcionasse, o que faz:
MYDATE=$(echo "$i" | grep -oP '\d{6,6}')
Relacionado ao seu código: Por que * not * pars 'ls'?