progress(1) is a separate utility on BSD; one of my favorites. (Although it is also built in to BSD ftp.)
I regularly use progress with dd, tar and other utilities.
At least one BSD dd now has a "msgfmt" option that outputs parseable, printf-style format strings.
Truthfully, I prefer it when these basic utilities are static except for fixing bugs. Using the new features in scripts means the scripts might lose some portability.
There's also the pv(1) utility on Linux and OS X Homebrew:
DESCRIPTION
pv shows the progress of data through a pipeline by giving infor-
mation such as time elapsed, percentage completed (with progress
bar), current throughput rate, total data transferred, and ETA.
To use it, insert it in a pipeline between two processes, with the
appropriate options. Its standard input will be passed through to
its standard output and progress will be shown on standard error.
I regularly use progress with dd, tar and other utilities.
At least one BSD dd now has a "msgfmt" option that outputs parseable, printf-style format strings.
Truthfully, I prefer it when these basic utilities are static except for fixing bugs. Using the new features in scripts means the scripts might lose some portability.