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