4 votos

¿Cuál es la diferencia real entre sh y bash?

Según lo que he leído en Internet, sh es esencialmente un alias para bash ejecutando un shellscript con sh se comportará igual que si se ejecuta con bash .

Según mi experiencia, esto no es del todo cierto, ya que las nuevas líneas se procesan de forma diferente. ¿Cuál es exactamente la diferencia entre sh y bash y como zsh es ahora el shell por defecto ¿alguien sabe si sh ¿cambiará en futuras versiones de Mac OS?

Considere el siguiente código:

sh -c "echo \"Hello\nWorld\""

Esto debería producir la siguiente salida:

Hello
World

Sin embargo, cuando se ejecuta con bash :

bash -c "echo \"Hello\nWorld\""

La nueva línea no se emite:

Hello\nWorld

Gracias de antemano.

4voto

La respuesta larga sobre esto ya se ha escrito, véase https://stackoverflow.com/questions/5725296/difference-between-sh-and-bash .

El echo builtin es una (de varias) cosas en las que sh y bash difieren. Para conseguir bash para manejar \n como carácter de control utilice echo -e .

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

En cuanto a la definición de sh en MacOS, consulte man sh (por ejemplo, en 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.

Así que básicamente ejecutando sh ejecutará cualquier shell /private/var/select/sh apunta en "modo de compatibilidad sh/POSIX".

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X