Based on what I've read online, sh
is essentially an alias for bash
; running a shellscript with sh
will behave the same as if it's run with bash
.
In my experience this is not entirely true, as newlines are processed differently. What exactly is the difference between sh
and bash
, and as zsh
is now the default shell does anyone know if sh
will change in future versions of Mac OS?
Consider the following code:
sh -c "echo \"Hello\nWorld\""
This should produce the following output:
Hello
World
However when run with bash
:
bash -c "echo \"Hello\nWorld\""
The newline is not output:
Hello\nWorld
Thanks in advance!
Best Answer
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 wheresh
andbash
differ. To getbash
to handle\n
as a control character useecho -e
.As for the definition of
sh
on macOS, seeman sh
(e.g. on Big Sur):So basically executing
sh
will execute whichever shell/private/var/select/sh
points to in "sh/POSIX compatibility mode".