bash - different - echo linux
Nueva lĂnea de eco en impresiones Bash literal / n (17)
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.
¿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
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"`
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, preste atención a 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, diluí esto 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 así:
#!/bin/bash
function GET_RECORDS()
{
echo -e "starting/n the process";
}
GET_RECORDS;
Esto funciona para mí en raspbian,
echo -e "hello//nworld"
Esto podría hacerse mejor como
x="/n"
echo -ne $x
-e la opción interpretará las barras traseras para la secuencia de escape
-n 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 hacerlo menos confuso)
Hay una nueva expansión de parámetros agregada en bash 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 cotización
$''…''
.
$ foo=''hello/nworld''
$ echo "${foo@E}"
hello
world
Me funciona en CentOS:
echo -e ""hello/nworld""
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:
Podrías usar printf
lugar:
printf "hello/nworld/n"
printf
tiene un comportamiento más consistente que el echo
. El comportamiento del echo
varía mucho entre las diferentes versiones.
Siempre podías hacer echo ""
.
p.ej
echo "Hello"
echo ""
echo "World"
También podrías usar el eco con tirantes,
$ (echo hello; echo world)
hello
world
También puedes hacer:
echo "hello
world"
Esto funciona para mí en mi macOS.
Tratar
echo -e "hello/nworld"
hello
world
Trabajó para mí en nano editor.
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.
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 están definidos por la implementación.
a menos que tenga una extensión XSI opcional.
Así que usa printf
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.
echo $''hello/nworld''
huellas dactilares
hello
world
$''''
cadenas utilizan ANSI C Cotización :
Las palabras de la forma
$'' string ''
se tratan especialmente. La palabra se expande a la cadena , con caracteres de escape de barra invertida reemplazados según lo especificado por el estándar ANSI C.
str=''hello/nworld''
$ echo | sed "i$str"
hello
world