Проблема заключается в том, что расширение параметр не использует регулярные выражения, но узоры или шарики (сравните разницу между регулярным выражением «filename_ .csv» и Глоб " filename_ .csv "). Globs не может соответствовать фиксированному числу определенной строки.
Однако вы можете включить расширенные шаблоны в bash
, который должен быть достаточно близко к тому, что вы хотите.
shopt -s extglob # Turn on extended pattern support
file2=${file/+([0-9])/20130215}
Вы не можете точно соответствовать 8 digts, но +(...)
позволяет соответствовать одному или более из шаблона внутри скобок, которое должно быть достаточным для использования.
Поскольку все, что вы хотите сделать в этом случае заменить все между _
символов, вы также можете просто использовать
file2=${file/_*_/_20130215_}