2009-04-16 18 views
52

Genellikle grep, her eşlemi komut satırında çalıştırıldığında ayrı bir satırda gösterir. Ancak, yukarıdaki komutlarda, her bir maçı ayıran yeni satır kaybolur. Yeni çizginin nasıl korunabileceğini bilen var mı? Tırnak içinde dışarı, $Bir kabuk değişkenine grep sonucunu atadıktan sonra yeni satırı kaybetme

+0

olası yinelenen: // stackoverflow .com/questions/29378566/i-just-assign-a-variable-ama-echo-variable-shows-else-else) –

+0

Daha fazlası [Bir bash değişkenine çoklu hat çıkışı yakalama] (http: // stackoverflow.com/questions/613572/capturing-multiple-line-output-to-a-bash-variable) – Renato

cevap

24

koyun:

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

Sen atamasında ancak yankı onu kaybetme değiliz.

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

verir: Sorunuza, ilgisiz

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

Ve

echo "${out}" 

Aşağıdaki komut dosyası ile benzer bir etkiye göreceksiniz: Eğer varsa bunu açıkça görebilirsiniz ama yine de bahsetmek isterim, sadece komutları iç içe geçirmenin ek yararı için backsticks yerine $() yapısını kullanmayı tercih ederim. (Ve tersi geçerli)

out=$(grep apache README) 

Şimdi bu hiç farklı görünmeyebilir ama sanki mümkün daha karmaşık komutları yapar: Yani komut satırı olur bash değişkenleri aktaran

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

Bunu yapabileceğinizi bilmiyordum, $() ... her zaman yeni bir şeyler öğrenmek İşte. – Tanj

+1

Expr kullanmadan matematik yapabilirsiniz. Sadece çift-parens kullanın: $ ((7 + 2)) –

+0

Aslında, şu andan itibaren tüm cevaplarımla deneyebilirim - sürüsünün eğitimi için bir (her zaman tamamıyla değil) ilgili snippet ekle :-) – paxdiablo

12

boşluk korur . Örneğin

:

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

yeni satırlar onlar "kaldırıldı" olsun boşluk olduğundan [Sadece bir değişken atanır fakat echo $ değişkeni başka bir şey gösterir] (http