Neden bash'ta “for” bulunan satırları okumuyorsunuz?


7

Ben "for" kullanarak bash satırları okumak için iyi bir yol olmadığını okudum. Birçok insan bunun sakar ve verimsiz olduğunu ve çoğu durumda başarısız olduğunu söylüyor.

Bash'ta satırları okumanın en iyi yolunun ne olduğunu bilmek isterim. Teşekkürler.

Örneğin:

$ for i in $(<afile); do echo "$i"; done

1
"For" kullanarak yazdığınız bash betiğine bir örnek var mı?
L2G

örneğin: $ i'de $ (& lt; afile); yankı yapmak "$ i"; tamam
Kyrol

Yanıtlar:


16

Tam olarak neyi kastettiğinizden emin değilim, ama hakkında konuştuğunuzu tahmin edeceğim for line in $(cat file); do * ve benzeri yapılar. Bu verimsizdir, çünkü bash bir deniz kabuğu üretip yürütmek zorundadır. cat, oku cat çıkış - tüm dosya - hafızaya, onu ( en yavaş kısım ), ancak o zaman tüm veriler üzerinde yinelenir. Güvenilmez çünkü bash Sözcük ayırma verilerde - sadece yeni satır karakterlerinde değil, aynı zamanda $ IFS'deki herhangi bir şeyde (boşluklar, sekmeler ...)

(Eğer kullanırsan $(<...) yerine $(cat ...), Linux'ta iki milisaniyede tasarruf sağlarsınız, ancak diğer tüm olumsuzluklar devam eder.)

Çok daha iyi bir seçenek kullanmaktır read içinde while döngü:

while read -r line; do
    echo "Input: $line"
done < myfile.txt

Veya bir programdan:

cat file1 file2 file3 |
while read -r line; do
    echo "Input: $line"
done

Bu, yalnızca gerektiği kadar okunur, gereksiz işlemler gerçekleştirmez, ancak özel alan bölmelerine olanak tanır ve büyük dosyalar üzerinde çoğu zaman daha hızlı ve daha az kaynak gerektirir.

Ayrıca bakınız:


Çok güzel cevap! Bana ne istediğimi gösterdin! Teşekkürler!
Kyrol
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.