Tengo un problema con echo
mi script:
echo -n "Some string..."
huellas dactilares
-n Some string...
y se mueve a la siguiente línea. En la consola funciona correctamente sin nueva línea:
Some string...
shell
command-line
sh
qwertz
fuente
fuente
bash
en modo shell bourne, funciona bien aquí. Además, es poco probable que realmente estés usando un shell bourne como tu shell interactivo, ¿no?echo -ne "text without new line: "; echo "some text";
Respuestas:
Existen múltiples versiones del
echo
comando, con diferentes comportamientos. Aparentemente, el shell utilizado para su script usa una versión que no reconoce-n
.El
printf
comando tiene un comportamiento mucho más consistente.echo
está bien para cosas simples comoecho hello
, pero sugiero usarprintf
para algo más complicado.¿En qué sistema estás y qué shell utiliza tu script?
fuente
#!/bin/bash
funcionó. Normalmente estoy trabajando con bash.printf
comando.echo
siempre agrega nuevas líneas ... La solución es jenky en el mejor de los casos.%
es su indicador de shell. Prueba esto y observa con atención:printf hello; sleep 5
bash
tiene un comando "incorporado" llamado "echo":Además, hay un comando "echo" que es un ejecutable adecuado (es decir, las bifurcaciones y los ejecutivos de shell
/bin/echo
, en lugar de interpretarloecho
y ejecutarlo):El comportamiento de cualquiera
echo
de los WRT\c
y-n
varía. Su mejor opción es usarprintf
, que está disponible en cuatro sabores * NIX diferentes que miré:fuente
Probar con
Funciona para mí como se esperaba (como entendí por su pregunta).
Tenga en cuenta que obtuve esta información de la
man
página. Laman
página también señala que el shell puede tener su propia versiónecho
, y no estoy seguro sibash
tiene su propia versión.fuente
echo "some string...\c"
. Sin embargo, si necesita admitir múltiples variantes de bash con comandos de eco muy diferentes, 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 admite \ c también, por lo que no es necesario usar el -n opción, pero necesita el -e para bash)Para lograr esto, existen básicamente dos métodos que uso con frecuencia:
1. Usando el cursor de escape (
\c
) conecho -e
Ejemplo :
-e
La bandera habilita los caracteres de escape E en la cadena.\c
trae el C volver ursor a la línea actual.O
2. Usando el
printf
comandoEjemplo :
fuente
Si usa echo dentro de un if con otros comandos, como "leer", podría ignorar la configuración y de todos modos saltará a una nueva línea.
fuente
Solo para el Linux más popular
Ubuntu
y esbash
:Comprueba qué shell estás usando? Principalmente a continuación funciona, de lo contrario vea esto :
echo $0
Si se imprime arriba
bash
, a continuación funcionará:printf "hello with no new line printed at end"
O
echo -n "hello with no new line printed at end"
fuente
Creo que en este momento su salida de impresión es la siguiente
Puede usar
xargs
para obtener stdout multilínea en la misma línea.fuente
Cuando vaya y escriba su script de shell, siempre ponga la primera línea como #! / Usr / bin / env bash. Este shell no omite ni manipula secuencias de escape. ex echo "Esta es la primera línea \ n" imprime Esta es la primera línea \ n.
fuente
fuente