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

1

Estoy en un Mac Book Air, OSX 10.8.

Estoy tratando de entender por qué estos dos fragmentos no imprimen el mismo resultado. sh -c 'echo -n 1' produce -n 1 mientras que bash -c 'echo -n 1' produce 1 como se esperaba.

¿Podría ayudarme a explicar por qué y cómo hacer que produzcan lo mismo (si es posible)?

    
pregunta Flevour 17.10.2012 - 09:34

2 respuestas

3

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

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

Hay varias implementaciones históricas incompatibles de echo que rompen su especificación de una manera que no se puede arreglar, y las marcas de opción por lo tanto no son portátiles. No conozco nada de lo que actualmente implementa POSIX echo correctamente.

shopt -u xpg_echo debería modificar este comportamiento. Además, como ya descubrió, no se está ejecutando en modo POSIX.

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

    
respondido por el ormaaj 17.10.2012 - 10:26
1

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

$ 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 scripts para bash. El sh de OS X no le impide utilizar Bashisms que podrían no funcionar con el /bin/sh en otras plataformas, como el dash en Ubuntu .

Consulte también esta pregunta y la sección sobre eco en < a href="http://www.etalabs.net/sh_tricks.html"> este sitio web .

    
respondido por el user495470 17.10.2012 - 11:40

Lea otras preguntas en las etiquetas