sh is not a single shell. Rather, it is a specification with the POSIX operating system standard for how a shell should work. A script that targets this specification can be executed by any POSIX-compliant shell, such as
ashand its derivatives, such as
In a POSIX-compliant operating system, the path
/bin/sh refers to a POSIX-compliant shell. This is usually a shell that has features not found in the POSIX standard, but when run as
sh, will restrict itself to the POSIX-compliant subset of its features.
$ echo Hello, world! Hello, world!
$ printf 'Hello, world!\n' Hello, world!
As a file:
#!/bin/sh printf '%s\n' 'Hello, world!'
$ for shell in ash bash dash ksh ksh93 zsh; do > $shell -c "echo '\\\\'$shell'\\\\'" > done \\ash\\ \\bash\\ \dash\ \pdksh\ \\ksh93\\ \zsh\
'echo' can only be used consistently, across implementations, if its arguments do not contain any backslashes (reverse-solidi), and if the first argument does not start with a dash (hyphen-minus). Many implementations allow additional options, such as
-e, even though the only option allowed is
-n (see below).
If the first operand is -n, or if any of the operands contain a character, the results are implementation-defined.