Я бы порекомендовал несколько иной способ циклического перебора имен файлов --с использованием bash расширенной подстановки для сбора имен файлов:
shopt -s extglob
for d in "${INPUT_DIR}"/"${INPUT_FILE_PREFIX}"[0-9][0-9]@(0[1-9]|1[0-9])@(0[1-9]|[12][0-9]|3[01])"${INPUT_FILE_SUFFIX}"
do
[[ $d =~ ${INPUT_FILE_PREFIX}([[:digit:]]+)${INPUT_FILE_SUFFIX} ]]
MYDATE=${BASH_REMATCH[1]}
done
Синтаксис подстановки почти такой же, как у вашего оператора grep. Каждый набор @(...)
вводит запрос на соответствие любому из заданных шаблонов, которые разделены |
. Я заметил, что (предполагаемый шаблон дня )для [3]
был одним классом символов -, поэтому я удалил окружающие его скобки.
Когда у нас есть имена файлов в цикле for
, вы можете использовать оператор регулярного выражения =~
условного выражения bash, чтобы вырезать цифры в MYDATE.