Em qualquer shell POSIX, incluindo bash
, usando os operadores ${var##pattern}
e ${var%pattern}
ksh:
case $string in
(*.*.*)
minor=${string##*.}
case $minor in
(? | "") minor=0$minor
esac
string=${string%.*}$minor
esac
Com o bash-3.2 + especificamente (e com a compatibilidade do bash 3.1 não ativada), você também pode fazer:
if [[ $string =~ ^(.*\..*)\.([^.]*)([^.])$ ]]; then
string=${BASH_REMATCH[1]}${BASH_REMATCH[2]:-0}${BASH_REMATCH[3]}
fi