Apple has shipped the 2007 vintage of Bash v3 and cannot upgrade to Bash 4 due to GPL3 restrictions. For the same reason, Apple is not including any of the GNU software. As Barney pointed out, the homebrew package manager can install Bash4 and that will go into /usr/local/bin. You could also install the GNU Coreutils in the same manner, which I did.
By shifting to Zsh, Apple can keep it version current. Zsh has far more power than Bash 4. By default, Zsh ignores white-space in filenames, so you do not have to quote Zsh variables to avoid Bash white-space issues. Want an absolute path in Zsh, it is simply ${var:a}. Zsh supports globing so you can do directory recursion. It also supports associative arrays, and ton of other stuff.
The Zsh site has a Zsh Manual for Zsh v5.3 which is current. The Zsh user guide however is dated 2003.
Much of the Bash script logic just works with Zsh, but now, when you open the Terminal, your Bash associated dot files do not get run, so your PATH and other shell customizations need to be set up for Zsh in the ~/.zshrc file. Here is what I have done with mine:
# .zshrc
export PATH=".:$HOME/bin:/usr/local/bin:$PATH"
export MANPATH=.:/usr/share/man:$MANPATH
TPUT="/usr/bin/tput"
Bluebld="$(${TPUT} bold; ${TPUT} setaf 63)"
White="$(${TPUT} bold; ${TPUT} setaf 15)"
Green="$(${TPUT} bold; ${TPUT} setaf 42)"
Normal="$(${TPUT} sgr0)"
MyHost="$(networksetup -getcomputername)"
export CLICOLOR=1
export GREP_COLOR='00;38;5;226'
export GREP_OPTIONS='--color=auto --extended-regexp'
export LSCOLORS='gxfxcxdxbxegedabagacad'
PS1="${Green}${MyHost}: %~ %% ${White}"
export EDITOR="/usr/bin/vim"
bindkey -v
That MyHost is because I do not want a hostname assigned by a remote VPN DNS server. The e/grep color is vivid yellow, and the Zsh uses an entirely different PS1 syntax from Bash. Finally, when I press the escape key in a command line, the bindkey -v allows me to use Vim editor syntax when editing the command-line.