Yanıtlar:
Komut dosyası iki dosyadan dize çiftlerini okur. Her yineleme, bu bir dize okur file11
INTO lineA
ve gelen file22
içine lineB
. Her iki dosyanın sonuna gelene kadar bunu yapar. Döngünün gövdesi iki dizeyi ve boş bir çizgi çıkarır.
<file11
Aracı "bağlantı / standart giriş yönlendirme file11
"bu komutu" ise, bu komutta" while
döngü. Bu da yazılabilirdi 0<file11
.
Standart girdi, dosya tanımlayıcı numarası 0'dır. Dosya tanımlayıcıları 1 ve 2, standart çıktı ve standart hata akışları için ayrılmıştır.
3<file22
Aracı "ile bağlantı dosya tanımlayıcı 3 file22
bu komut için". 3 sayısı bir sonraki "boş" dosya tanımlayıcı numarası olur, ancak kod 4 veya 5 veya 0, 1 ve 2 dışında herhangi bir küçük tamsayı kullanmış olabilir (kullanılabilir dosya tanımlayıcı numaralarının sınırı hangi kabuğa bağlıdır? kullanılır, ancak 9'a kadar olan sayıların çalışması garanti edilir).
Döngüde, read lineA
varsayılan olarak standart girdiden, yani dosyadan file11
(standart giriş döngüden devralınır) bir dize okuyacaktır . Bu da yazılabilirdi read lineA <&0
.
İle read lineB <&3
, read
komut dosya tanımlayıcı 3'ten, yani file22
standart girdi yerine okur (dosya tanımlayıcı 3, standart girdi gibi döngüde kullanılabilir).
Kısacası, iki dosyadan "aynı anda" (sırayla her bir dosyadan bir seferde bir dize) okumak için standart giriş akışını ve "ekstra" bir dosya tanımlayıcıyı (sayı 3) kullanır. Genellikle, yalnızca bir giriş akışına erişim vardır , ancak bu açıkça ikinci bir giriş akışı oluşturarak ve bunu file22
dosyaya bağlayarak bu kısıtlamayı atlar .
İlişkili:
"Line" yerine "string" kelimesini kullanıyorum. İki dosyadan okunan şeyler, beyaz boşluklar çıkarılmış olacak ve bazı kaçış dizileri özel olarak yorumlanacaktır.
Tuşlarını kullanarak bir satır okumak read
için
IFS= read -r varname
İlişkili:
3<file22
bir gibidir fopen
nerede FID
döndü ama önceden belirtilmemiştir?
fdopen()
. Evet.