zsh also has them.
Another neat way of wrapping code in pushd/popd is to use a subshell.
(cd $dir
do-stuff
)
Oilshell ( https://www.oilshell.org/ ) has support for code blocks so you can: cd /tmp {
do-stuff
}