2010-03-04 13 views
11

Ben boru bir kabuktaki çalışmasına süre neden olduğu için ne yazık ki bu çalışmıyorYeni bir alt kabuk oluşturmadan bash'ta birden fazla satır okuyor musunuz?

var=0 
grep "foo" bar | while read line; do 
    var=1 
done 

gibi bir şey yapmaya çalışıyorum. Bunu yapmanın daha iyi bir yolu var mı? Başka bir çözüm varsa "okuma" kullanmam gerekmiyor.

Benzer olanlara benzer Bash variable scope baktım ama ondan çalıştı herhangi bir şey alamadım.

+0

http://mywiki.wooledge.org/BashFAQ/024 – tripleee

cevap

17

Gerçekten bu kadar basit bir şey yapıyorsanız, while read döngüsüne bile ihtiyacınız yoktur. Aşağıdaki işe yarar:

VAR=0 
grep "foo" bar && VAR=1 
# ... 

gerçekten başka şeyler döngüde oluyor, çünkü döngü ihtiyaç yaparsanız, bir <(commands) süreç ikamesi yönlendirme yapabilirsiniz:

VAR=0 
while read line ; do 
    VAR=1 
    # do other stuff 
done < <(grep "foo" bar) 
+2

(liste) kaybetmek? Süreç ikamesi olarak adlandırılmadı mı? http://tldp.org/LDP/abs/html/process-sub.html – pihentagy

2

sonra kullanmayın boru ve Bu grep

var=1 
while read line 
do 
    case "$line" in 
    *foo*) var=1 
    esac 
done <"file" 
echo "var after: $var" 
İlgili konular