it-swarm-es.com

Nueva línea de eco en impresiones Bash literal\n

En Bash, probé esto:

echo -e "hello\nworld"

Pero no imprime una nueva línea, solo \n. ¿Cómo puedo hacer que imprima la nueva línea?

Estoy usando Ubuntu 11.04.

1954
Sergey

Podrías usar printf en su lugar:

printf "hello\nworld\n"

printf tiene un comportamiento más consistente que echo. El comportamiento de echo varía enormemente entre las diferentes versiones.

2399
sth

¿Estás seguro de que estás en el bash? Funciona para mí, las tres formas:

echo -e "Hello\nworld"
echo -e 'Hello\nworld'
echo Hello$'\n'world
1473
choroba
echo $'hello\nworld'

huellas dactilares

hello
world

$'' strings use Cita ANSI C :

Las palabras de la forma $'string' se tratan especialmente. La Palabra se expande a cuerda, con los caracteres de escape de barra invertida reemplazados según lo especificado por el estándar ANSI C.

498
Vanuan

Siempre puedes hacer echo "".

p.ej.

echo "Hello"
echo ""
echo "World"
115
Nayeem Zen

En la remota posibilidad de que alguien se encuentre golpeando su cabeza contra la pared tratando de averiguar por qué el guión de un compañero de trabajo no imprime nuevas líneas, busque esto ->

#!/bin/bash
function GET_RECORDS()
{
   echo -e "starting\n the process";
}

echo $(GET_RECORDS);

Como en el caso anterior, la ejecución real del método puede estar envuelta en un eco que reemplaza cualquier eco que pueda existir en el método en sí. Obviamente, lo disminuí por brevedad, ¡no fue tan fácil de detectar!

Luego, puede informar a sus compañeros que una mejor manera de ejecutar las funciones sería:

#!/bin/bash
function GET_RECORDS()
{
   echo -e "starting\n the process";
}

GET_RECORDS;
39
Uncle Iroh

Tratar

echo -e "hello\nworld"
hello
world

trabajó para mí en nano editor.

33
Harsha Biyani

Esto me funciona en Raspbian,

echo -e "hello\\nworld"
20
Sathesh
str='hello\nworld'
$ echo | sed "i$str"
hello
world
15
alinsoar

POSIX 7 en echo

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html

-e no está definido y las barras invertidas están definidas por la implementación:

Si el primer operando es -n, o si alguno de los operandos contiene un carácter <backslash>, los resultados se definen por implementación.

a menos que tenga una extensión XSI opcional.

Así que usa printf en su lugar:

el operando de formato se utilizará como la cadena de formato descrita en la notación de formato de archivo XBD [...]

la Notación de formato de archivo :

\ n <newline> Mueve la posición de impresión al comienzo de la siguiente línea.

También tenga en cuenta que Ubuntu 15.10 y la mayoría de las distribuciones implementan echo como:

  • un Bash incorporado: help echo
  • un ejecutable independiente: which echo

lo que puede llevar a cierta confusión.

Me funciona en CentOS:

echo -e ""hello\nworld""
8
vanishedzhou

Una entrada más aquí para aquellos que no lo hicieron funcionar con ninguna de estas soluciones, y necesitan obtener un valor de retorno de su función:

function foo()
{
    local v="Dimi";
    local s="";
    .....
    s+="Some message here $v $1\n"
    .....
    echo $s
}

r=$(foo "my message");
echo -e $r;

Solo este truco funcionó en un Linux en el que estaba trabajando con esta fiesta:

GNU bash, version 2.2.25(1)-release (x86_64-redhat-linux-gnu)

Espero que ayude a alguien con un problema similar.

4
DNT

También puedes hacer:

echo "hello
world"

Esto funciona tanto dentro de un script como desde la línea de comandos.
En la línea de comando, presione Shift+Enter para hacer los saltos de línea dentro de la cadena.

Esto funciona para mí en mi macOS y mi Ubuntu 18.04

4
vinzee

Esto podría hacerse mejor como

x="\n"
echo -ne $x

-e la opción interpretará las barras traseras para la secuencia de escape
- La opción n eliminará la nueva línea final en la salida

PD: el comando echo tiene el efecto de incluir siempre una nueva línea final en la salida, por lo que se requiere -n para apagar esa cosa (y hacerlo menos confuso)

3
Dhwanit

Mi guion:

echo "WARNINGS: $warningsFound WARNINGS FOUND:\n$warningStrings

Salida:

WARNING : 2 WARNINGS FOUND:\nWarning, found the following local orphaned signature file:

En mi guión de bash me estaba enojando como tú hasta que lo intenté:

echo "WARNING : $warningsFound WARNINGS FOUND:
$warningStrings"

Simplemente pulsa enter donde quieras insertar ese salto. La salida ahora es:

WARNING : 2 WARNINGS FOUND:
Warning, found the following local orphaned signature file:
3
TanisDLJ

También podrías usar el eco con tirantes,

$ (echo hello; echo world)
hello
world
2
Avinash Raj

A veces, puede pasar varias cadenas separadas por un espacio y se interpretará como \n.

Por ejemplo, cuando se usa un script de shell para notificaciones de varias líneas:

#!/bin/bash
notify-send 'notification success' 'another line' 'time now '`date +"%s"`
1
Hunter Frazier

Hay un nuevoexpansión de parámetros agregado en bash 4.4 que interpreta las secuencias de escape:

${[email protected]} - E operator

La expansión es una cadena que es el valor del parámetro con secuencias de escape de barra invertida expandidas como con el mecanismo de cotización $'…'.

$ foo='hello\nworld'
$ echo "${[email protected]}"
hello
world
1
PesaThe

En los casos, tiene que repetir el contenido largo (como el código) con alguna concatinación env var y desea hacerlo simple.

echo -e, printf podría tener alguna limitación

Puede usar algunos caracteres especiales como marcador de posición para el salto de línea (como ~)

y prueba esto:

echo ${content} | tr '~' '\n' > $targetFile

debe invocar otro programa (tr) que debería estar bien IMO.

0
ZenithS

Simplemente escriba

eco

para obtener una nueva linea;)

0
SiteTester