El comando echo es una forma práctica de imprimir cualquier cosa en scripts de shell.
De forma predeterminada, siempre agrega un carácter de nueva línea. Entonces, si ejecuta varios comandos de eco, cada salida se muestra en una nueva línea.
Pero esto podría ser un inconveniente en situaciones en las que necesita imprimir con el comando echo pero sin la nueva línea.
Imagínese tratando de imprimir la serie de Fibonacci:1, 1, 2, 3, 5, 8, 13, 21, 34, 55
Puede usar el -n
bandera del comando echo para imprimir sin salto de línea:
echo -n "Hello World"
Notarás que el aviso se muestra en la misma línea inmediatamente después de Hello World now.
Echémosle un vistazo más profundo.
Imprimir comando de eco sin nueva línea
Tomemos un bucle for simple que imprima el contenido de una matriz en el script bash y verifiquemos su salida.
$ bash_array=(1 2 3 4)
$ for i in ${bash_array[@]}; do
echo $i
done
1
2
3
4
Como puede ver, cada vez que se ejecuta el comando echo, la salida se muestra en una nueva línea. A veces, eso es lo que desea, otras veces, desea que la salida continúe en la misma línea sin comenzar en la nueva línea.
Conoce la bandera "-n"
La implementación bash del comando echo generalmente agrega un "\n" (un carácter de escape para indicar una nueva línea) a la salida. El indicador "-n" no agrega un "\n" a la salida.
$ bash_array=(1 2 3 4 5 6 7 8)
$ for i in ${bash_array[@]}; do
echo -n $i
done
12345678
Como puede ver, todos los números ahora se muestran en una sola línea. Esto significa que cada vez que se ejecutó el comando echo, no se generó una nueva línea.
echo -n no funcionó. ¿Y ahora qué?
En algunos casos, usando echo -n
también imprime el -n
carácter en lugar de imprimir el texto sin nueva línea.
Eso es posible si hay una implementación separada del comando echo por parte del shell que está usando.
¿Confundido? Algunas distribuciones y shells pueden tener su propia implementación de algunos comandos de shell incorporados. echo es uno de esos comandos.
Aquí hay algunas cosas que puede probar.
Agregue el carácter shebang seguido de /bin/bash para asegurarse de que su script de shell use bash shell.
#!/bin/bash
Si eso no funciona, puede intentar usar el comando printf en lugar de echo.
De forma predeterminada, printf no agrega el carácter de nueva línea:
printf "Something without newline"
Debe proporcionar explícitamente el carácter de nueva línea \n:
printf "Something with newline\n"
El comando printf se comporta como el comando printf en C y puede usarlo para imprimir salidas formateadas más complicadas.
El comando printf tiene un comportamiento mucho más consistente. echo está bien para cosas simples, pero aconsejo usar printf para algo más complicado.
Espero que este sencillo tutorial te ayude a controlar el comportamiento de una nueva línea en scripts bash.