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.
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.
Respuestas:
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 mucho entre las diferentes versiones.
printf %"s\n" hello world
- printf reutilizará el formato si se dan demasiados argumentos
echo
soporte es compatible con la -e
opción.
echo
, -e
solo se imprime en la salida, así que creo que esta respuesta es perfectamente válida ya echo
que no es coherente aquí (a menos que estemos hablando de una versión específica).
¿Estás seguro de que estás en bash? Funciona para mí, las cuatro formas:
echo -e "Hello\nworld"
echo -e 'Hello\nworld'
echo Hello$'\n'world
echo Hello ; echo world
-e
param no existe en todos los sistemas operativos * nix
echo $'hello\nworld'
huellas dactilares
hello
world
$''
las cadenas usan Citas ANSI C :
Las palabras de la forma son tratadas especialmente. La palabra se expande a cadena , con los caracteres con barra invertida reemplazados según lo especificado por el estándar ANSI C.
$'string'
Siempre se puede hacer echo ""
.
p.ej
echo "Hello"
echo ""
echo "World"
echo ""
funciona para mí y creo que es la forma más simple de imprimir una nueva línea, incluso si esto no responde directamente a la pregunta. Salud.
echo -en "\n"
.
echo
es suficiente para obtener una línea vacía
Tratar
echo -e "hello\nworld"
hello
world
Trabajó para mí en nano
editor.
Desde la página del manual:
-e
permitir la interpretación de escapes de barra invertida
En el caso de que alguien se encuentre golpeándose la cabeza contra la pared tratando de descubrir 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 lo anterior, la ejecución real del método puede estar envuelta en un eco que reemplaza cualquier eco que pueda estar en el método. Obviamente diluí esto por brevedad, ¡no fue tan fácil de detectar!
Luego puede informar a sus camaradas que una mejor manera de ejecutar funciones sería así:
#!/bin/bash
function GET_RECORDS()
{
echo -e "starting\n the process";
}
GET_RECORDS;
POSIX 7 en eco
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
-e
no está definido y las barras diagonales inversas están definidas en la implementación:
Si el primer operando es -n, o si alguno de los operandos contiene un carácter <backslash>, los resultados están definidos por la implementación.
a menos que tenga una extensión XSI opcional.
Por lo tanto, le recomiendo que use printf
en su lugar, que está bien especificado:
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 <línea nueva> Mueva la posición de impresión al comienzo de la línea siguiente.
También tenga en cuenta que Ubuntu 15.10 y la mayoría de las distribuciones implementan echo
tanto como:
help echo
which echo
lo que puede generar cierta confusión.
Simplemente escriba
echo
para obtener una nueva línea
str='hello\nworld'
$ echo | sed "i$str"
hello
world
A mí me funciona en CentOS:
echo -e ""hello\nworld""
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+ Enterpara hacer los saltos de línea dentro de la cadena.
Esto funciona para mí en mi macOS y mi Ubuntu 18.04
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 este bash:
GNU bash, version 2.2.25(1)-release (x86_64-redhat-linux-gnu)
Espero que ayude a alguien con un problema similar.
Mi guión:
echo "WARNINGS: $warningsFound WARNINGS FOUND:\n$warningStrings
Salida:
WARNING : 2 WARNINGS FOUND:\nWarning, found the following local orphaned signature file:
En mi script de bash me estaba enojando como tú hasta que acabo de intentar:
echo "WARNING : $warningsFound WARNINGS FOUND:
$warningStrings"
Simplemente presione enter donde desea insertar ese salto. La salida ahora es:
WARNING : 2 WARNINGS FOUND:
Warning, found the following local orphaned signature file:
También puedes usar echo con llaves,
$ (echo hello; echo world)
hello
world
echo hello; echo world
Esto podría hacerse mejor como
x="\n"
echo -ne $x
La opción -e interpretará las barras invertidas para la secuencia de escape
-n la opció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 hacerla menos confusa)
Se agrega una nueva expansión de parámetrosbash 4.4
que interpreta las secuencias de escape:
${parameter@operator} - 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 comillas.
$ foo='hello\nworld'
$ echo "${foo@E}"
hello
world
Si está escribiendo guiones y repetirá nuevas líneas como parte de otros mensajes varias veces, una buena solución multiplataforma es poner una nueva línea literal en una variable como esta:
newline='
'
echo "first line$newlinesecond line"
echo "Error: example error message n${newline}${usage}" >&2 #requires usage to be defined
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"`
\n
. Se interpreta como un argumento separado para el programa, y el programa en sí mismo puede mostrar ese argumento en una nueva línea, pero eso no significa que se haya convertido \n
en ningún punto y que dependa completamente del programa.
Esto me llevó allí ...
outstuff=RESOURCE_GROUP=[$RESOURCE_GROUP]\\nAKS_CLUSTER_NAME=[$AKS_CLUSTER_NAME]\\nREGION_NAME=[$REGION_NAME]\\nVERSION=[$VERSION]\\nSUBNET-ID=[$SUBNET_ID]
printf $outstuff
Rendimientos:
RESOURCE_GROUP=[akswork-rg]
AKS_CLUSTER_NAME=[aksworkshop-804]
REGION_NAME=[eastus]
VERSION=[1.16.7]
SUBNET-ID=[/subscriptions/{subidhere}/resourceGroups/makeakswork-rg/providers/Microsoft.Network/virtualNetworks/aks-vnet/subnets/aks-subnet]
Solución adicional:
En algunos casos, debe hacer eco de varias líneas de los contenidos largos (como código / configuraciones)
Por ejemplo :
echo -e
,
printf
podría tener alguna limitación
Puede usar algunos caracteres especiales como un marcador de posición como un salto de línea (como ~
) y reemplazarlo después de crear el archivo usandotr
echo ${content} | tr '~' '\n' > $targetFile
necesita invocar otro programa ( tr
) que debería estar bien en mi opinión.