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, while
burada bir döngüye sahip olmanın gerçekten hiçbir şeyi gerçekleştirmediğini söylemek içindir . read
Yerleş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 a
ve b
değerleri alır 1
ve 2
sırasıyla değerleri c
alı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 read
komut 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 , read
yerleş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 : read
Ek 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 , read
her zaman bir satırın tamamını okumaya çalışacağını - ve bunun read
hem bir döngü hem de bir döngü olmadan kullanılabilir olması amaçlandığını düşündüğünüzde anlamak daha kolay hale gelir .