The hosts will face India at the same venue in Sunday’s final, after opener Soumya Sarkar’s Twenty20 international career-best 48 helped them past Pakistan’s 129 for seven.
Bangladesh appeared to be on course for a comfortable chase. But after Mohammad Amir returned to york Sarkar, some late hitting from veteran captain Mashrafe Mortaza and Mahmudullah was needed.
Mortaza had a moment of fortune when was caught off a Mohammad Sami no-ball in the 19th over, before Bangladesh won with five deliveries to spare.
Pakistan’s patchy innings had mustered the lowest 10-over total in their Twenty20 history as Taskin Ahmed conceded just two runs, and saw off the dangerous Umar Akmal cheaply, in his first three overs.
Sarfraz Ahmed (58no) and Shoaib Malik’s much-needed stand of 70 in 50 balls helped to add almost another hundred to just 34 for four at the half-way stage, despite Al-Amin Hossain’s three for 25.
Sarfraz reached just his second Twenty20 50 in 40 balls, and hit five fours and two sixes – but Pakistan were still short of runs.
They meet Sri Lanka on Friday, in a dead rubber.
Bangladesh go into the fixture knowing that a win will guarantee them a place in Sunday’s final against Pakistan, who themselves are in need of victory to keep alive their own chances of facing their fierce rivals in this year’s showpiece.
Pakistan will need to beat Bangladesh and then Sri Lanka to ensure qualification, or that a loss to Sri Lanka after a win over Bangladesh did not result in a worse net run-rate than the tournament hosts.
Use #360LIVE or comment below to have your say on the match across social media.
In-form Virat Kohli steered India into the Asia Cup final with their sixth successive Twenty20 victory, beating Sri Lanka by five wickets.
Poster-boy batsman Kohli (56no) underpinned India’s pursuit of 138 for nine in Dhaka, to take the table-toppers up to six points. They still have another match to come against minnows United Arab Emirates before Sunday’s final at the same venue.
Kohli, who took 44 balls to record his fourth 50 in his last six Twenty20 innings, shared half-century stands with Suresh Raina and big-hitting veteran Yuvraj Singh – after Nuwan Kulasekara had taken two early wickets.
India won with four balls to spare – while Sri Lanka have just one win from their three matches, and Bangladesh can confirm their place in the final if they beat Pakistan on Wednesday.