One problem with using the truncate operator for string matching is case matching.
In the truncate operator example, ${foo%%*ATE} matches SENATE.
DALEK$ foo=SENATE
DALEK$ if [ '' = "${foo%%*ATE}" ] ; then echo "$foo! $foo!"; fi
SENATE! SENATE!
DALEK$
It will not match Senate because ate and ATE are different cases.
DALEK$ foo=Senate
DALEK$ if [ '' = "${foo%%*ATE}" ] ; then echo "$foo! $foo!"; fi
DALEK$