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".