1 votos

Por qué sh -c 'echo -n 1' es diferente de bash -c 'echo -n 1'

Estoy en un Mac Book Air, OSX 10.8.

Estoy tratando de entender por qué estos dos fragmentos no imprimen la misma salida. sh -c 'echo -n 1' salidas -n 1 mientras que bash -c 'echo -n 1' salidas 1 como se esperaba.

¿Podríais ayudarme explicando por qué y cómo hacer que salgan igual (si es posible)?

3voto

ormaaj Puntos 131

Porque aparentemente Mac OS es uno de los sistemas que responde a la xpg_echo cuando se ejecuta en modo POSIX. Ejecutar bash como /bin/sh es equivalente a ejecutarlo con --posix o estableciendo POSIXLY_CORRECT.

La solución es dejar de usar echo excepto en los casos en los que no puede haber ambigüedad. printf es el sustituto portátil. Nunca use banderas de opción para hacer eco, (y use printf si lo hace).

Existen múltiples implementaciones históricas incompatibles de echo que rompen su especificación de una manera que no se puede arreglar, y las banderas de opción son, por lo tanto, no portables. No conozco nada que actualmente implemente POSIX echo correctamente.

shopt -u xpg_echo debería modificar este comportamiento. Además, como ya has descubierto, no se ejecuta en modo POSIX.

También es posible que desee actualizar ... bash 3 se está convirtiendo en un poco crujiente. Muchos errores han sido corregidos desde entonces.

1voto

/bin/sh es en realidad una versión de bash que se inicia en modo POSIX ( bash --posix ) y también tiene algunos otros cambios. Otra diferencia es que interpreta las secuencias de escape por defecto:

$ bash -c "echo 'a\ba'"
a\ba
$ sh -c "echo 'a\ba'"
a
$ sh -c "shopt -u xpg_echo; echo 'a\ba'"
a\ba
$ bash --posix -c "echo 'a\ba'"
a\ba

printf %s funcionaría de la misma manera en la mayoría de los entornos.

También puedes escribir simplemente scripts para bash. El sh de OS X no te impide usar Bashisms que podría no funcionar con el /bin/sh en otras plataformas, como dash en Ubuntu.

Ver también esta pregunta y la sección sobre el eco en este sitio web .

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