Döngüyü bu şekilde yeniden yazmak, neler olduğunu ortaya çıkarır:
echo '1 2 3 4 5 6' | while read a b c
do
echo '(iteration beginning)' a="$a" b="$b" c="$c" '(iteration ending)'
done
Bu, çıktısı olarak verir:
(iteration beginning) a=1 b=2 c=3 4 5 6 (iteration ending)
İlk önce sadece bir yankı komutunun çalıştırıldığına dikkat edin. Birden fazla kez çalıştırılsaydı, diğer şeylerin yanı sıra, birden fazla basılan (iteration beginning)ve (iteration ending)alt dizileri de görürsünüz .
Bu, whileburada bir döngüye sahip olmanın gerçekten hiçbir şeyi gerçekleştirmediğini söylemek içindir . readYerleşiği boşluk ayrılmış metni okuma 1 her biri belirli bir değişkene. Ekstra giriş belirtilen son değişkenin sonuna eklenir. 2 Böylece değişkenler ave bdeğerleri alır 1ve 2sırasıyla değerleri calır 3 4 5 6.
Döngü koşulu (zaman while read a b c) ikinci kez değerlendirilir, (biz sadece tek bir metin satırı borulu) boru kullanılabilecek başka hiçbir giriş yok yani readkomut değerlendirir YANLıŞ yerine gerçek ve döngü durur (zamankinden yürütme vücut ikinci kez).
1 : Değişken isimleri argüman olarak iletildiğinde , readyerleşik ve teknik olmak gerekirse, girdi okur, IFS boşlukuyla karşılaştığında ayrı "kelimelere" ayırır (ayrıca bu soruya ve bu makaleye bakınız ).
2 : readEk giriş alanlarını belirtilen son değişkene sıkışma davranışı, ilk başta birçok komut dosyası için sezgisel değildir. Florian Diesch'in cevabının dediği gibi , readher zaman bir satırın tamamını okumaya çalışacağını - ve bunun readhem bir döngü hem de bir döngü olmadan kullanılabilir olması amaçlandığını düşündüğünüzde anlamak daha kolay hale gelir .