What is the actual difference between sh and bash?

Solution 1:

The long answer on this has already been written, see https://stackoverflow.com/questions/5725296/difference-between-sh-and-bash.

The echo builtin is one (of several) things where sh and bash differ. To get bash to handle \n as a control character use echo -e.

$ bash -c "echo -e \"Hello\nWorld\""
Hello
World

As for the definition of sh on macOS, see man sh (e.g. on Big Sur):

sh is a POSIX-compliant command interpreter (shell).  It is implemented by re-execing as 
either bash(1), dash(1), or zsh(1) as determined by the symbolic link located at 
/private/var/select/sh. If /private/var/select/sh does not exist or does not point to a
valid shell, sh will use one of the supported shells.

So basically executing sh will execute whichever shell /private/var/select/sh points to in "sh/POSIX compatibility mode".