sh
no es una sola concha. Más bien, es una especificación con el estándar del sistema operativo POSIX sobre cómo debería funcionar un shell. Un script que se dirige a esta especificación puede ser ejecutado por cualquier shell compatible con POSIX, como
bash
ksh
ash
y sus derivados, como el dash
zsh
En un sistema operativo compatible con POSIX, la ruta /bin/sh
refiere a un shell compatible con POSIX. Por lo general, este es un shell que tiene funciones que no se encuentran en el estándar POSIX, pero cuando se ejecuta como sh
, se restringirá al subconjunto compatible con POSIX de sus funciones.
$ for shell in ash bash dash ksh ksh93 zsh; do
> $shell -c "echo '\\\\'$shell'\\\\'"
> done
\\ash\\
\\bash\\
\dash\
\pdksh\
\\ksh93\\
\zsh\
'echo' solo se puede usar de manera consistente, en implementaciones, si sus argumentos no contienen ninguna barra invertida (reverse-solidi), y si el primer argumento no comienza con un guión (guión-menos). Muchas implementaciones permiten opciones adicionales, como -e
, aunque la única opción permitida es -n
(ver a continuación).
Desde POSIX :
Si el primer operando es -n, o si alguno de los operandos contiene un carácter, los resultados están definidos por la implementación.
Con echo
$ echo Hello, world!
Hello, world!
Con printf
:
$ printf 'Hello, world!\n'
Hello, world!
Como un archivo:
#!/bin/sh
printf '%s\n' 'Hello, world!'