Las diferentes implementaciones de echo
se comportan de maneras molestamente diferentes. Algunos no toman opciones (es decir, simplemente harán eco de -e
como usted describe) e interpretan automáticamente las secuencias de escape en sus parámetros. Algunos toman banderas y no interpretan escapes a menos que se les dé el indicador -e
. Algunos toman banderas e interpretan diferentes secuencias de escape dependiendo de si se pasó la bandera -e
. Algunos harán que te rasgues el pelo si tratas de que se comporten de una manera predecible ... oh, espera, eso es todo.
Lo que probablemente esté viendo aquí es una diferencia entre la versión de echo
integrada en bash
frente a /bin/echo
o quizás en comparación con alguna otra shell incorporada. Esto me mordió cuando Mac OS X v10.5 incluía un bash builtin echo
que hacía eco de indicadores, a diferencia de lo que esperaban todos mis scripts ...
En cualquier caso, hay una solución: use printf
en su lugar. Siempre interpreta secuencias de escape en su primer argumento (la cadena de formato). Los problemas son que no agrega automáticamente una nueva línea (por lo que debe recordarlo explícitamente), y también interpreta las secuencias %
en su primer argumento (después de todo, es una cadena de formato). En general, quiere poner todo el material de formato en la cadena de formato, luego coloque cadenas variables en el resto de los argumentos para que pueda controlar cómo se interpretan según qué formato %
use para interpolarlos en el resultado. Algunos ejemplos:
printf "foo\nbar\n" # this does what you're trying to do in the example
printf "%s\n" "$var" # behaves like 'echo "$var"', except escapes will never be interpreted
printf "%b\n" "$var" # behaves like 'echo "$var"', except escapes will always be interpreted
printf "%b\n" "foo\nbar" # also does your example
Estoy corriendo Ubuntu Lucid 10.04 en caso de que esto es importante –
que se hacen eco está usando? escribe 'which echo' en la línea de comando. –
Resulta que estaba usando la versión 'Bourne Shell' en mis scripts, pero la versión Bash en la versión interactiva. –