Opener Najmul Hossain Shanto, who smashed seven fours and one maximum in his 55-ball 71-run knock, single-handedly powered Bangladesh to a competitive 150 for 7.
In reply, Zimbabwe lost too many wickets to find themselves in the dumps at 35 for 4 in the sixth over but Sean Williams conjured up a magnificent 42-ball 64-run innings to revive the chase.
He was dismissed in the 19th over, leaving Zimbabwe to get 16 in the last six balls.
ICC Men’s T20 World Cup 2022: Super 12Bangladesh won by 3 runs.#BCB | #Cricket | #T20WorldCup | #BANvZIM https://t.co/VavMfxc24X
— Bangladesh Cricket (@BCBtigers) 1667112040000
Mosaddek Hossain then bowled the most important over of his career as he dismissed Brad Evans (2) in the second ball but Richard Ngarava slammed him for a four and a six in the next two balls to keep them in the hunt.
Hossain, however, had Ngarava stumped in the next ball as Zimbabwe needed five off the last ball.
New batter Blessing Muzarabani then was stumped as the players celebrated and were back in their dugouts.
But just then, the umpires called it a no-ball as wicketkeeper Hasan had collected the ball in front of the stumps, giving hope to the Zimbabwe fans.
However, it was not to be as Hossain showed great nerves and slipped a fullish delivery and Muzarabani couldn’t connect yet again. Zimbabwe ended their innings at 147 for 8.
What a match! 🥵Bangladesh emerge victorious after a thrilling clash against Zimbabwe!#T20WorldCup | #BANvZIM |… https://t.co/c1Xuf8Ui9t
— ICC (@ICC) 1667111930000
It was Bangladesh’s second win in the tournament following their 104-run loss to South Africa, while Zimbabwe suffered their first loss in the super 12 stage.
Bangladesh (4) are now in the second spot in the points table with two more games to go, while Zimbabwe (3) find themselves in the fourth position.
Earlier, pacer Blessing Muzarabani claimed the wickets of Soumya Sarkar (0) and Litton Das (14 off 12) in his opening spell.
Shanto, who had a hamstring trouble in the initial stage and also survived a run-out scare, forged a 54-run stand with skipper Shakib Al Hasan (23 off 20) before adding another 36 runs with Afif Hossain (29 off 19).
The duo punished the bowlers whenever they bowled short or too full and Zimbabwe fielders also looked sloppy as Bangladesh managed to find the boundaries easily.
Zimbabwe had an aweful day on the field as they were guilty of miss-fielding, missing run-out chances and dropping catches.
IT IS NOT OVER!Zimbabwe require 4 runs off the final ball.#T20WorldCup | #BANvZIM | 📝https://t.co/Qi8dhfgeEW https://t.co/ROp5JmLS9T
— ICC (@ICC) 1667111577000
Zimbabwe took a gamble by introducing left-arm spinner Sean Williams into the attack and it paid off as he got rid of Shakib, who top-edged a slog-sweep and was caught by a diving Muzarabani.
Shanto, however, continued to dominate as he completed his maiden fifty in T20 format in the 13th over with a single.
He sent Brad Evans for a leather hunt, clobbering him over long-on for the first six of the innings, before picking up two more fours to accumulate 17 runs in the 16th over.
It was Sikandar Raza, who got rid off Shanto with skipper Craig Ervine taking the catch.
While Richard Ngarava bowled a tight next over, Afif was dropped by Evans at deep mid-wicket in the 19th over off Sikandar Raza and the batter made good use of the chance, producing a big slog-sweep for a six as 12 runs came of the over.
In the last over, Bangladesh lost three wickets.
In total, Bangladesh scored 87 runs in the last 10 overs.
Defending the total, Taskin Ahmed (3/19) and Mustafizur Rahman (2/15) did most of the damage early on before Hossain picked up two wickets in the final over.