2012-06-25 117 views
311

tengo un problema con echo en mi guión:'eco' y sin salto de línea en un script de shell

echo -n "Some string..." 

impresiones

-n Some string... 

y se mueve a la siguiente línea. En la consola está funcionando correcly sin salto de línea:

Some string... 
+2

¿Qué implementación de Bourne Shell está utilizando? Si ejecuto 'bash' en modo bourne shell, funciona bien aquí. Además, es poco probable que realmente estés usando un shell bourne como caparazón interactivo, ¿no? – FatalError

+3

en Ubuntu: texto 'echo -ne' sin línea nueva: "; echo "some text"; ' – zsoltii

Respuesta

334

Hay varias versiones del comando echo, con diferentes comportamientos. Aparentemente, el shell utilizado para su script utiliza una versión que no reconoce -n.

El comando printf tiene un comportamiento mucho más uniforme. echo está bien para cosas simples como echo hello, pero sugiero usar printf para cualquier cosa más complicada.

¿En qué sistema estás y qué shell usa tu script?

+34

Al comenzar con la línea' #!/bin/bash' funcionó. Normalmente estoy trabajando con bash. – qwertz

+0

Ojalá hubiera un equivalente de Windows en CMD :(Por lo que puedo ver, no lo hay, solo soluciones para lograr el mismo comportamiento. –

+2

@kayleeFrye_onDeck: Quizás haya una versión de Windows del comando 'printf' –

51

intento con

echo -e "Some string...\c" 

Me funciona como se esperaba (que he entendido de su pregunta).

Tenga en cuenta que obtuve esta información de la página man. La página man también señala que el shell puede tener su propia versión de echo, y no estoy seguro de si bash tiene su propia versión.

+0

+1 para insinuarme en la dirección correcta, aunque el eco no reconozca -una opción probablemente no reconozca -e (ni necesite) la opción tampoco, así que probablemente quiera decir 'eco 'alguna cadena ... \ c "' en cambio. Sin embargo, si necesita admitir múltiples variantes de bash con comandos de eco muy distintos, probablemente sea mejor que use printf o necesite verificar las capacidades de los comandos de eco con algo como '[-n" $ (echo -e) "] && echo" sh stuff \ c "|| echo -e "Bash stuff \ c" '(al menos bash también soporta \ c, así que no necesita usar la opción -n, pero necesita el -e para bash) – Timo

+0

\ c gracias ... trabajó –

78

bash tiene un comando "built-in" llamado "eco":

$ type echo 
echo is a shell builtin 

Además, hay un comando de "eco" que es un ejecutable adecuado (es decir, las horquillas de concha y ejecutivos /bin/echo, en oposición a la interpretación de echo y ejecutándolo):

$ ls -l /bin/echo 
-rwxr-xr-x 1 root root 22856 Jul 21 2011 /bin/echo 

El comportamiento de cualquiera de WRT echo 's para \c y -n varía. Su mejor opción es utilizar printf, que está disponible en cuatro sabores diferentes * NIX que han visto:

$ printf "a line without trailing linefeed" 
$ printf "a line with trailing linefeed\n" 
+2

Gracias por la respuesta masivamente en profundidad! – Fuser97381

0

Si utiliza eco dentro de un caso con otros comandos, como "leer", puede ignorar el entorno y saltará a una nueva línea de todos modos.

Cuestiones relacionadas