Tengo un problema con echomi 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

bashen 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
echocomando, con diferentes comportamientos. Aparentemente, el shell utilizado para su script usa una versión que no reconoce-n.El
printfcomando tiene un comportamiento mucho más consistente.echoestá bien para cosas simples comoecho hello, pero sugiero usarprintfpara algo más complicado.¿En qué sistema estás y qué shell utiliza tu script?
fuente
#!/bin/bashfuncionó. Normalmente estoy trabajando con bash.printfcomando.echosiempre 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 5bashtiene 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 interpretarloechoy ejecutarlo):El comportamiento de cualquiera
echode los WRT\cy-nvarí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
manpágina. Lamanpágina también señala que el shell puede tener su propia versiónecho, y no estoy seguro sibashtiene 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 -eEjemplo :
-eLa bandera habilita los caracteres de escape E en la cadena.\ctrae el C volver ursor a la línea actual.O
2. Usando el
printfcomandoEjemplo :
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
Ubuntuy esbash:Comprueba qué shell estás usando? Principalmente a continuación funciona, de lo contrario vea esto :
echo $0Si 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
xargspara 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