Я вижу, что Рахул уже опубликовал решение на базе bash (среди прочих), которое является более короткой версией первого решения, которое я придумал:
function reversedots1() (
IFS=. read -a array <<<"$1"
new=${array[-1]}
for((i=${#array[*]} - 2; i >= 0; i--))
do
new=${new}.${array[i]}
done
printf '%s\n' "$new"
)
но я не мог остановиться на этом, и почувствовал необходимость написать рекурсивное решение, ориентированное на bash:
function reversedots2() {
if [[ $1 =~ ^([^.]*)\.(.*)$ ]]
then
printf %s $(reversedots2 "${BASH_REMATCH[2]}") . "${BASH_REMATCH[1]}"
else
printf %s "$1"
fi
}