while
має синтаксис інтересу. Ви можете поставити кілька команд перед do ... while
циклом, і відповідний випадок, можливо, повинен буде перемкнути цю функцію, залежно від ваших конкретних вимог: чи читаєте ви до кінця найдовшого файлу, або лише до кінця найкоротшого.
Наприклад, read || read
просто не працює (відповідно до вимог запитання), бо, коли читається перший файл true
, читання другого файлу пропускається, поки перший файл не буде прочитаний від початку до кінця ... Потім, оскільки статус все ще триває true
, поки цикл продовжується і читає другий файл від початку до кінця.
read && read
буде читати файли одночасно (синхронно), якщо ви хочете прочитати лише найкоротший файл. Однак якщо ви хочете прочитати обидва файли до eof
, тоді вам потрібно працювати з while's
вимогами синтаксису, тобто. по команді безпосередньо передdo while
тим цикл виробництва ненульового коду повернення вирватися з циклу While.
Ось приклад того, як читати обидва файли до eof
while IFS= read -r line3 <&3 || ((eof3=1))
IFS= read -r line4 <&4 || ((eof4=1))
!((eof3 & eof4))
do
echo "$line3, $line4"
done 3<file3 4<file4
(можливо, ви захочете перевірити eof3 та eof4 перед прочитаним, але загальна ідея є, особливо в остаточному істинному / хибному стані.
||
не працює для мене. Він обробляє file1 потім file2 , але це зберегти файли синхронізуються з&&
, який виходить з той час як цикл по першому EOF . - GNU bash 4.1.5