2009-04-16 18 views
52
#!/usr/local/bin/bash 
out=`grep apache README` 
echo $out; 

muestra lo general grep cada partido en una línea separada cuando se ejecuta en la línea de comandos. Sin embargo, en las secuencias de comandos anteriores, la nueva línea que separa cada coincidencia desaparece. ¿Alguien sabe cómo se puede preservar la nueva línea?nueva línea después de asignar resultado grep para una concha variable de

+0

posible duplicado de [I acaba de asignar una variable, pero echo $ variable muestra otra cosa] (http: // stackoverflow .com/questions/29378566/i-just-assigned-a-variable-but-echo-variable-shows-something-else) –

+0

Es más un duplicado de [Captura de salida de línea múltiple a una variable bash] (http: // stackoverflow.com/questions/613572/capturing-multiple-line-output-to-a-bash-variable) – Renato

Respuesta

24

poner $ cabo entre comillas:

#!/usr/local/bin/bash 
out=`grep apache README` 
echo "$out"; 
73

No estamos perdiendo en la asignación, pero en el eco. Esto se puede ver claramente si:

echo "${out}" 

Usted verá un efecto similar con el siguiente script:

x="Hello, 
I 
am 
a 
string 
with 
newlines" 
echo "=====" 
echo ${x} 
echo "=====" 
echo "${x}" 
echo "=====" 

que da salida:

===== 
Hello, I am a string with newlines 
===== 
Hello, 
I 
am 
a 
string 
with 
newlines 
===== 

Y, irrelevantes a su pregunta pero me gustaría mencionarlo de todos modos, prefiero usar el constructo $() en lugar de los backticks, solo por el beneficio adicional de poder anidar comandos. Por lo que su línea de la escritura se convierte en:

out=$(grep apache README) 

Ahora que no puede parecer diferente (y no lo es) sino que hace posibles comandos más complejos como:

lines_with_nine=$(grep $(expr 7 + 2) inputfile) 
+0

No sabía que pudieras hacer eso con $() ... aprender algo nuevo todo el tiempo aquí. – Tanj

+1

Puedes hacer matemática sin usar expr. Solo use paréntesis dobles: $ ((7 + 2)) –

+0

De hecho, podría intentarlo con todas mis respuestas a partir de ahora: añada un fragmento (no siempre totalmente) relevante para la educación del enjambre :-) – paxdiablo

12

Citando las variables en bash conserva el espacio en blanco .

Por ejemplo:

#!/bin/bash 
var1="A B C D" 
echo $var1 # A B C D 
echo "$var1" # A B C D 

desde saltos de línea son espacios en blanco que consiguen "removidos"

Cuestiones relacionadas