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: